I’m relatively new to plugins and I have a text command and a menu item in Context.sublime-menu. It’s all working fine. I would like, however, for my command to know the location of the right-click that brought up the context menu. Is there a way to get this information?
TextCommand class has a method named
want_event() that gives you this information:
As seen here, the default implementation returns
False, so you need to implement it and return
True. When triggered by a mouse action, your command is invoked with an argument of
event that contains the
y position (in window coordinates) of the interaction; you can use
view.window_to_text() to convert that to the position in the
event argument is only passed when the command is triggered by a mouse action; otherwise it’s not provided. Note also that if you implement any methods that also take command arguments, such as
event argument will be passed to them as well.
The following is a modified version of the default plugin from
Tools > Developer > New Plugin... modified to work this way. If you invoke the command with the mouse, the
event argument is filled with the position of the click, which is converted to a text point and the
Hello World! string is inserted there. Otherwise,
event is not passed to the command at all, so it defaults to
None and the code handles it by inserting at the start of the buffer instead.
import sublime import sublime_plugin class ExampleCommand(sublime_plugin.TextCommand): def run(self, edit, event=None): pt = 0 if not event else self.view.window_to_text((event["x"], event["y"])) self.view.insert(edit, pt, "Hello, World!") def want_event(self): return True
That works! Thanks for the help!