2012-09-28 6 views
3

J'écris un plugin pour Sublime Text qui déplace entre autres le curseur au début du document.Déplacer le curseur/point dans un Sublime Text 2 Plugin

Mode Vintage a un raccourci clavier pour ce genre de chose:

{ "keys": ["g", "g"], "command": "set_motion", "args": { 
    "motion": "vi_goto_line", 
    "motion_args": {"repeat": 1, "explicit_repeat": true, "extend": true, 
        "ending": "bof" }, 
    "linewise": true }, 
    "context": [{"key": "setting.command_mode"}] 
} 

Comment puis-je obtenir le même effet ou appeler la même commande à partir d'un plug-in?

Répondre

8

Dans le dossier des plugins par défaut, il y a un plugin appelé goto_line.py qui fait exactement cela.

import sublime, sublime_plugin 

class PromptGotoLineCommand(sublime_plugin.WindowCommand): 

    def run(self): 
     self.window.show_input_panel("Goto Line:", "", self.on_done, None, None) 
     pass 

    def on_done(self, text): 
     try: 
      line = int(text) 
      if self.window.active_view(): 
       self.window.active_view().run_command("goto_line", {"line": line}) 
     except ValueError: 
      pass 

class GotoLineCommand(sublime_plugin.TextCommand): 

    def run(self, edit, line): 
     # Convert from 1 based to a 0 based line number 
     line = int(line) - 1 

     # Negative line numbers count from the end of the buffer 
     if line < 0: 
      lines, _ = self.view.rowcol(self.view.size()) 
      line = lines + line + 1 

     pt = self.view.text_point(line, 0) 

     self.view.sel().clear() 
     self.view.sel().add(sublime.Region(pt)) 

     self.view.show(pt) 
+0

Merci! C'est un autre endroit où je devrais vraiment avoir regardé! :-) – severin