作者
赵亮-碧海情天 imzl # live.com
前言
接触ST好一阵子,一直只是一般性地使用,和有时对菜单的CAPTION进行汉化。但随着安装的插件增多,有的下拉菜单已经太长了,势必需要对菜单进行重组了。按照菜单默认的内容进行观察,不难明白重组的方式。
在重组过程中,忽然想到,平时使用时好像有一些不太方便的地方,比如“编辑”菜单里面项目很多,而且那么多项目还都有子菜单,很多还都没有键盘加速键,只能依靠鼠标访问,效率较差。还有一些感觉不太合适的地方,比如“编辑”菜单中的“软换行”并没有改变文档的实际内容,只是改变一下显示方式,按意义来讲应该放在“视图”菜单里才对。
于是打定主意要对默认菜单进行大手术。这时就发现有些疑惑等待解决了,于是在网上查找,却都没有比较详尽的说明,在ST官方网站列出的官方和非官方的文档里面也都没有介绍——这方面的内容是空白页。
经过自己的一些摸索尝试,终于基本弄清了菜单文件的所有含义。修改的结果可以查看我这两篇文章里的介绍和图片:
(附图)Sublime Text 3056 赵亮(碧海情天)汉化定制(双12)版 http://my.oschina.net/theforever/blog/185251
(附图)Sublime Text 3059 汉化增强版(赵亮-碧海情天) http://my.oschina.net/theforever/blog/186730
通过查看我修改的内容,你能知道我怎么做的,其中最重要的就是我加在菜单文件里的第一个菜单项目。它看起来像是个关于汉化者的广告,事实上,它是一个完全鲜明的自定义菜单项,后面所有项目你都可以不必看了,光看它就能明白菜单文件的格式用法。如果你对此有兴趣,并且下载查看了我的劳动成果,那么就应该得到我为你准备的这份礼物,快速悟透ST的菜单文件用法。
如果你还没有下载我发布的软件包,那么我大致在这里讲一下关键点。并非是保留,而是有些东西需要参考实物去实践领悟,用语言讲,说的人累,听的人还不一定能听明白。
要点
从来就没有什么救世主
一个{}是一个JSON对象,同时也是一个菜单对象。空的{}会产生一个没有显示文字也不能执行的空菜单,但它毕竟也是一个不会被报错的菜单。所以,“没有什么救世主”,没有哪个菜单属性是不可或缺的。
也不靠神仙皇帝
id 并非ST系统固定设置的,比如"id":"file",并非是系统中原本有个叫作file的对象等候你用同样的id去指定对它进行设置。id只是给你目前这个菜单起个标识名称,然后供其它在你这个菜单后面加载的菜单文件通过这个id名称进行查找并用新属性覆盖,也即重载。当你要根据系统默认的菜单ID或者已知的他人的菜单ID去添加自己菜单的时候,你要依靠它们的ID去寻找该对象,然后在其children属性中添加自己的菜单。这时你要查看它们的ID设置并保持自己使用的与其一致,但当这些都可以被你更改时,你可以任意更改ID,只要一致即可,所以ID并不像“神仙皇帝”一样不可侵犯。而当你不考虑后人或者的确无需考虑的时候,对于自己增加的菜单也完全可以不加id属性。当然,如果后人用到你的成果时,他若真需要,也可以自己再在你的基础上修改,添加也好,怎样也罢,反正不用你操心了。除非你想给自己后备使用。比如我在菜单文件里建立的第一个菜单就是一个只有ID=ZL(一看就知道是自定义名称)的菜单,在其它菜单文件里才根据这个ID对其进行设置。
当有多个相同ID的菜单时会怎样? 当在其它菜单文件中对这些相同ID的菜单进行重载时又会怎样? 虽说一般不会故意这样用,但这些你也都可以自己尝试一下,会更好地建立你的知识观。
要创造人类的幸福
虽说菜单可以什么属性都不加,但要想让菜单能够执行某个行为指令,就必须指定 command 属性了,其值必须是ST内部指令和所有插件的PY程序中的以sublime_plugin.TextCommand或sublime_plugin.WindowCommand作参数的类的名称,并且写法有分别,在PY中使用驼峰式写法,如ZhaoLiang,而在菜单和 sublime-commands 文件里的command属性值要写成毛毛虫式,如zhao_liang。查看所有PY脚本有点麻烦,一个简单方法就是查看Default和其它插件包里的 Default.sublime-commands 文件里注册的命令。ST插件虽不硬性要求,但提倡把脚本中的命令都在 sublime-commands 文件中注册,一是方便用户来查找你增加的命令,二是可以让用户使用CTRL+SHIFT+P的组合键调出“命令面板”,在里面快速检索你注册的命令进行调用。
全靠我们自己
我们修改菜单文件最常做的就是修改某项菜单的 caption 属性值了。它是菜单的显示文字,可以说内容是随便你设置的,即使是设置成和其它菜单相同的,只要你看着能接受,系统肯定不会不同意。当然,我们修改它不是为了添乱,而是改成我们希望的样子。随着安装插件的增多,如果你不仅追求视觉上的和谐,还希望菜单的键盘访问键能够互不干扰的工作(比如同一组菜单的键盘访问键都不相同。如果相同,就会先在相同的菜单间切换了,效率上会差些),就需要经常根据情况来修改 caption 了。这对于大多用户来说,都是需求最多的事情。
我们要夺回劳动果实
菜单不仅是鼠标操作的,也是可以用键盘操作的。事实上,用键盘操作要更快。而用键盘操作菜单,比用键盘组合快捷键(在sublime-keymap文件里定义)去执行命令更容易分类和记忆。比如先按CTRL+K,再按CTRL+别的键 的组合键命令有好几个,它们分属不同的主菜单,也就是说,CTRL+K 开头的命令横跨几个主菜单,包括几种不同性质的内容。这样很难记忆,或者说,记忆成本较高。但如果你先用ALT+主菜单的键盘访问键,再按个A或W(你设置的下拉菜单项的键盘加速键),就可以执行对应的菜单,这个速度比按两次组合键还要快,而你很容易分清类别,容易记忆。所以应该重视菜单的键盘访问键,让菜单不仅能点,还要能按,并习惯用键盘访问菜单。设置菜单的键盘访问字母,就要用到 mnemonic 属性。这个属性的值只能是一个字母,而且这个字母必须在caption里有出现,否则是无效的。如果没加这个属性,默认是用 caption 的开头字母作为键盘访问键。当开头字母有相同的时候,为避免冲突,可以选择开头字母后面任意一个字母作为 mnemonic 属性的值。
让思想冲破牢笼
对ST菜单文件的灵活使用是很有必要的。有些菜单项目的安排可能不合理(至少对你的来说可能不理想),我们不仅可以把它从一个主菜单挪到另一个主菜单中,也可以把它作为主菜单使用(当它含有子菜单时)。即使它并不含有子菜单,而是一个独立的命令菜单,就象我给菜单文件添加的第一个菜单项,也是可以放在主菜单级别,然后鼠标点击执行指令的。
具体的灵活运用就要靠你开动脑筋,让思想冲破牢笼了。
快把那炉火烧得通红
args 属性可以给command属性指定的命令输送参数。通过这种配合,可以实现较强大的插件。从菜单修改的角度来讲,提供不同的合适的 args 可以轻松创键多个相似而不同的菜单,比如“打开菜单文件”、“打开命令文件”、“打开配置文件”。等你能把这个属性玩透彻了,整个菜单文件也就快搞明白了。
趁热打铁才会成功
好,看完我这些介绍,赶快自己行动实践一下吧,趁热打铁效果才好啊。
相关阅读
Sublime Text 3 插件的汉化、开发、发布方法教程 http://my.oschina.net/theforever/blog/136554
转载声明
本文及内容均属原创,遵循《知识共享 署名-非商业性使用-禁止演绎 2.5 中国大陆协议》进行发布,您可以自由: 复制、发行、展览、表演、放映、广播或通过信息网络传播本作品。惟须遵守下列条件:
-
署名 — 您必须按照作者或者许可人指定的方式对作品进行署名。
-
非商业性使用 — 您不得将本作品用于商业目的。
-
禁止演绎 — 您不得修改、转换或者以本作品为基础进行创作。
来源:oschina
链接:https://my.oschina.net/u/1050041/blog/186764