2013-11-27 3 views
1

플러그인 나는 다른 사용하여 세 개의 클래스로 현재 파일에서 모든 텍스트를 복사 지금까지 약간의 스크립트가 있습니다3 내가 숭고한 텍스트 3 플러그인 작업입니다

import sublime, sublime_plugin 

# string and new file created 
s = 0 
newFile = 0 

class CreateNewWindowCommand(sublime_plugin.WindowCommand): 
    def run(self): 
     global s, newFile 
     s = self.window.active_view().substr(sublime.Region(0, self.window.active_view().size())) 
     newFile = self.window.new_file() 

class CopyTextCommand(sublime_plugin.TextCommand): 
    def printAChar(self,char,edit): 
     self.view.insert(edit, 0, char) 

    def run(self, edit): 
     global s 
     st = list(s) 
     for i in st[::-1]: 
      self.printAChar(i, edit) 

class PrintCodeCommand(sublime_plugin.WindowCommand): 
    def run(self): 
     self.window.run_command("create_new_window") 
     newFile.run_command("copy_text") 

을 스크립트는 먼저 PrintCodeCommand를 통해 실행됩니다.

나는이 코드에 대한 여러 질문이 있습니다

  1. 이 할 수있는 '권리'방법을? 전역 변수를 전달하는 것은 약간 더러운 것처럼 보입니다.
  2. WindowCommand와 TextCommand를 동시에 사용할 수있는 클래스를 만드는 방법이 있습니까?
  3. 삽입 명령 (CopyTextCommand에서) 삽입, 처음에는 파일 끝에 추가 할 수있는 방법이 있습니까?

또 하나 : 어떻게 sublime.set_timeout()을 사용할 수 있습니까? 이 때문에 같은 :

# ... 
class CopyTextCommand(sublime_plugin.TextCommand): 
    def printAChar(self,char,edit): 
     sublime.set_timeout(self.view.insert(edit, 0, char) , 1000) 
     # I want to print a char one per second 

또는 time.sleep()를 사용하여 명령하지만이 작동하지 않는 것 ... 미리

감사합니다!

+0

질문 당 여러 질문을하지 마십시오. – MattDMo

답변

1

여기서 간단히 대답하겠습니다. 자세한 내용을 원하면 별도의 질문을 만드십시오.

  1. 아니요, 실행 명령에 인수를 전달할 수 있습니다. CopyTextCommand의 run 메소드는 def run(self, edit, content)과 비슷할 것입니다.
  2. 아니요, 생성 된보기에서 텍스트 명령을 전달하지 않고 실행할 수 있습니다. 올바른보기를 식별 할 목적으로 이름을 적용하거나 임의의 설정을 만들 수도 있습니다.
  3. 설명서 (https://www.sublimetext.com/docs/3/api_reference.html)를 살펴보십시오. 두 번째 인수는 오프셋입니다.

보너스 : set_timeout에는 콜백 기능이 필요합니다. 파이썬에서 lambda를 찾으십시오.

+0

1. 확인해 보겠습니다. 2. 나는 당신의 대답을 이해하지 못합니다. 3. 감사합니다. 설정된 시간 초과에 대해 나는 그것을 올바르게 수행하는 방법을 테스트하고 이해하려고 노력할 것입니다. 감사 ! – nobe4

+0

3 개의 별도의 명령을 사용하는 대신 현재 새 창 명령 인 newView.run_command ("copy_text")를 호출 할 수 있습니다. 만약 당신이 정말로 분리되어 있다면, 당신은'view.settings(). set ("some special key", )'을 사용하여 새로운 뷰에 어떤 설정을 적용하고 그 뷰를 검색 할 수있다. 버퍼 이름을'view # set_name'으로보고 그것을 검색 할 수도 있습니다. – skuroda

+0

한 번에 전체 파일을 복사하지 않기 때문에 직접 복사해야합니다. 대신 임시 파일로 저장하려고합니다. 여러 클래스를 갖는 목적은 새 파일을 만들 수 없기 때문에 파일의 내부를 한 번에 조작 할 수 없거나 copy_text와 같은 숭고한 기본 명령을 사용하는 것입니다. – nobe4