행의 내용이 무엇이든 명령행이 되는 것은 아니고 특별하지만 간단한 규칙을 정해두어 사용하고 있습니다.
저의 경우는 현재의 라인이 정규표현식 으로 /^'?#?>/ 으로 시작하는 부분을 명령행으로 인식하도록 디자인했습니다.
작은 따옴표는 vb에서의 주석라인이고, 샾은 펄이나 groovy등등에서의 주석라인으로 인식합니다.
기타 c나 java등에서는 멀티라인 주석이 가능하므로 그냥 > 으로 시작하는 라인이 명령행이 됩니다.
다음과 같은 라인에 커서를 두고
>edit C:\temp\test.groovy
단축키 F4를 누르면 해당 명령이 발동하는 방식입니다.
실행전

실행결과
단축키를 F4로 사용하는 이유는 원래 emeditor의 매크로 실행키가 F4였던 것 이외에 특별한 이유는 없습니다. 지금은 Ctrl-Shift-P로 바뀌어 배포되고 있습니다만, 이미 F4로 손이 익숙해졌고, 키 누르기가 불편한 노트북등에서 F4는 발동시키기 쉽고, F4키가 특별히 중요한 의미를 가지고 있지 않고 있기 때문에(대게 여러 에디터에서 Find in File의 Jump Next기능으로 정해져있습니다) F4로 바인딩해 사용하고 있습니다.
클래스의 이름은 crowdyF4Command 로 생각해 봤습니다.
파일은 crowdy.py 파일이 editthis명령으로 쉽게 열 수 있기 때문에 커지면 나중에 분리하기로 하고, crowdy.py 안에 함께 작성해 버리는 쪽이 편하다고 생각합니다.
코드입니다.(좀 더 가다듬을 필요가 있는 코드입니다만.)
#언제나처럼 api문서는 이쪽 입니다.
'''
view.run_command('crowdy_f4')
view.run_command('crowdy_ex')
[
{ "keys": ["f4"], "command": "crowdy_f4" },
{ "keys": ["alt+w"], "command": "crowdy_ex" }
]
>dir
>edit C:\temp\test.groovy
>edit C:\temp\test.groovy
'''
import sublime, sublime_plugin
import string, re
class CrowdyF4Command(sublime_plugin.TextCommand):
def run(self, edit):
for region in self.view.sel():
if region.empty():
curPoint = self.view.line(region)
strLine = self.view.substr(curPoint)
self.__parseCommand(strLine)
else:
lines = self.view.substr(region)
def __parseCommand(self, strLine):
p = re.compile("^'?#?>(.+)\s+([^\n]+)?$")
m = p.match(strLine)
if (m):
strCommand = m.group(1)
if strCommand == 'edit':
strParam = m.group(2)
self.view.window().open_file(strParam)
else:
print "not defined command : " + strCommand
else:
print "no command : " + strLine
예고편이랄까 test.groovy 파일의 내용을 보면, 주석의 형태로
#run:groovy {fullname}
라는 부분이 있습니다.
저는 이것을 확장shebang이라고 (제멋대로 이름을 붙여) 부르고 있는데,
emeditor의 F5의 키로 할당해 사용하고 있는 내용으로, 현재의 버퍼의 확장shebang부분을 해석해 명령을 실행하는 커맨드가 있으면 역시 편하지 않을까 합니다.
No comments:
Post a Comment