标题: 坑爹的sublime鼠标单击事件

时间: 2013-11-11 23:31:00

正文:

我已经习惯把 sublime text 叫 sublime 了,整体来说,这是个很好的轻便实用的好编辑器。 我最爱它以我最爱的 python 作为扩展语言。

接触 sublime 写插件(plugin/扩展)以后,才慢慢感觉作者不够用心,api 文档十分差强人意,各种不系统全面, 也没有一个健壮的架构,一些细节处理很"凑合"。用一个人的一生来形容,现在只能说是个二十来岁, 朝气蓬勃,意气奋发又精明能干的小伙。

        转载请注明出处 http://blog.hickwu.com/posts/306 by Hick

这次原意是想实现比较常见的鼠标事件,当然我主要是关注左键单击的事件。 特意 google 搜索英文词汇 sublime mouse event , 还真找到了相关文章, 有一个现成的插件 MouseEventListener, 虽然说只适合 sublime 2 , 在 sublime 3 下面试用的时候, 根据报错: run_ takes 3 positional argument but 2 were given 。 稍微改了下也能跑。把 mouse_event_listener.py 中的

class DragSelectCallbackCommand(sublime_plugin.TextCommand):
    def run_(self, args):

改成

class DragSelectCallbackCommand(sublime_plugin.TextCommand):
    def run_(self, opts, args):

不过使用不到一天的过程中,有俩个莫名其妙的副作用:

  1. 时不时敲着敲着,光标就乱了错位了,点到一个地方,鼠标偏偏跑另外一个地方, 输入的文字也是错位的,大概十来分钟或者个把小时出现一回,重启就好。在 linux 用 vi 编辑中文遇到过类似的让人发神经的情况。

  2. 影响 shift + 光标选择连续文本等不能使用。

继续换各种关键词搜索查找,找到一个官方论坛讨论里提到 on_selection_modified 事件, 理解起来,跟鼠标点击的行为契合。查看最新的 sublime text 3 API reference 找到该函数,发现有兄弟函数 on_selection_modified_async ,异步不阻塞的。实测了下,还真是完美满足鼠标单击的要求。 虽然字面理解上是"选择变化"事件,连续单击同一个地方,也会触发该事件。

查看更多文章
分享到:


分享到: