Sublime Text 手工汉化和插件开发、提交方法教程(三)——提交插件

  (转载须注明本文原始地址和作者“碧海情天 赵亮”及博客地址http://blog.csdn.net/theforever)

  在本教程系列的第一部分讲了“ST的汉化方法”(http://blog.csdn.net/theforever/article/details/8962727),主要意义在于能够解决ST汉化包对于插件添加的菜单不能汉化,和某些插件可能把汉化过的菜单又变回英文的问题。

   在系列的第二部分讲了“ST插件开发方法”(http://blog.csdn.net/theforever/article/details/8963194)。你已经可以自己开发和使用并小范围地散发你的插件了。

  但若想让你的插件出现在 ST 的 Package Control 面板中的“安装插件”列表中,让全球喜爱ST的用户都有机会品尝你的劳动成果,体会成就感,就要耐心看完本部分的内容了。

  首先要避免在你的插件中使用中文,因为ST对GBK的态度已经说明一切,你含有中文的插件是极不可能通过下面提到的审核的。

  然后为了帮助你更好理解为什么要进行下面的行为,我介绍一下P C的工作原理。它是利用两个流行的源码项目服务器(github和bitbucket)的功能实现的。它在源码服务器上存放着一个插件列表文件,里面含有你在选择“安装插件”时会显示的插件列表。所以你只要提交你的插件地址给那个插件列表文件即可。P C会根据用户的选择自动找到你的插件地址,并通过源码服务器提供的打包功能将你的插件打包成ZIP,下载保存到用户电脑中的ST插件目录,然后更改扩展名为sublime-package。ST会自动对插件目录扫描和应用新插件。如果你提供的插件URL不含有对打包功能的支持,就会以目录的形式下载存放到与Installed Packages文件夹平级的Packages文件夹中。

  那么为了能够向插件列表文件中加入你的插件地址,你需要按照该列表的要求来提供你的插件。

  以GITHUB为例(BitBucket大致也相同),你需要先去 www.github.com 注册一个帐号。由于这是源码仓库服务器,而非存放编译好的软件,所以审查机制非常宽松,即使是随便填的邮箱都可以注册成功。但在之后还是会提醒你至少验证一个邮箱的(你可以设置一个用来登录的私密邮箱,还可以设置一个公开的用于交流的邮箱)。当然,由于你的源码要面对众多的内行,所以也不要琢磨干什么偷偷摸摸的坏事了。

  注册完成后,你可以在网站右上方你的帐号旁边找到“建立仓库”按钮,点击后给自己的仓库起个名,也就是你的插件的名称。在这一步要注意,因为这个服务器肯定不只限于你存放ST插件的源码,所以你肯定会想给你的仓库起个“Sublime xxxx“的名字来标识一下。这个时候建议你最好不要加,因为P C觉得这对于它来说完全多余,向它提交的肯定都只是ST插件,而带有这样名称的插件下载到用户电脑里,也会让用户对如此明显冗余的内容感到厌烦,因此P C要求插件名称里不要含有这样的字样。对于那些不幸已经这样起名的,P C还推出了名称映射功能。这不仅对你增加一道设置映射的手续,而且使你的实际插件URL与用户们看到和使用的插件名称有所差异,所以最好在建立仓库时就不要添加,只起描述你插件作用的名字即可。而且应该使用驼峰式命名,避免使用下划线。在仓库的描述栏中填写好插件的说明,包括适用的版本号和用途,要简洁明确,然后勾选生成readme.md。确定。

  现在你已经拥有了一个空的代码仓库,你可以使用GIT或GITHUB软件进行同步和版本更新,也可以直接在网页中使用“新建文件”和“编辑文件”功能来建立和修改文件。新手用后者比较容易上手,成手用前者能提高效率。

  假设你已经通过这两种方式之一把你的插件内容存到了仓库中,现在在仓库根目录还要建立一个packages.json文件,向其中写入如下内容:

    {
     "schema_version": "1.2",
     "packages": [
      {
       "name": "你的插件名称,如PasteWithoutBlankLines",
       "description": "你的插件的描述",
       "author": "作者名称,可以写你真名或是在 github 上的用户名",
       "homepage": "https://github.com/你的用户名/插件名",
       "last_modified": "最后修改的日期时间",
       "platforms": {
        "*": [
         {
          "version": "你的插件版本号",
          "url": "https://codeload.github.com/你的用户名/插件名/zip/tag名"
         }
        ]
       }
      }
     ]
    }


  确保为上面每个键名设置你的信息。若插件能工作于所有操作系统平台,则 platforms 键应写为 "*" , 若插件专为某一操作系统而写,应写明是 "osx", "windows" 或是 "linux",也可以为三种或两种平台各自指定不同实现方式和版本的插件URL(尽管这很少使用,因为你在一个版本里就可以通过程序来判断不同的操作系统从而进行不同的操作行为)。如果你长期只用一种操作系统,可能会觉得忽略另外两者很平常,但如果考虑到P C作者面对的是全球使用不同操作系统的用户,你就会知道他对这一点还是会相当注意的。
  url 键不一定必须指定在 https://codeload.github.com 上,也可以是都能正常访问下载到的sublime-package文件地址。即使在github网站上,也还有另外一种指定资源的方式,但用得少,也没必要故意使用那种大家都不常用的方式,就不讲了。
  下载 URL 的最后部分是 tag分支 名。虽然可以使用主分支master,但建议 tag 一个代码的特定版本。这样你或别人可以访问到所有历史版本,万一新版对某些用户不适用,他们还可以找到并恢复到旧版。

  当你的插件被收录之后,如果你升级了插件的版本,要记得更改主分支里面的 packages.json 文件中的 version 和 URL。

  把P C作者自己的packages.json摘录在下面,看着会更清楚:

{
	"schema_version": "1.1",
	"packages": [
		{
			"name": "Alignment",
			"description": "Easy alignment of multiple selections and multi-line selections",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/alignment",
			"last_modified": "2011-09-18 23:13:00",
			"platforms": {
				"*": [
					{
						"version": "2.0.0",
						"url": "http://sublime.wbond.net/Alignment.sublime-package"
					}
				]
			}
		},
		{
			"name": "Package Control",
			"description": "A full-featured package manager",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/package_control",
			"last_modified": "2013-01-21 20:13:00",
			"platforms": {
				"*": [
					{
						"version": "1.6.3",
						"url": "http://sublime.wbond.net/Package Control.sublime-package"
					}
				]
			}
		},
		{
			"name": "Prefixr",
			"description": "Runs CSS through Prefixr.com API",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/prefixr",
			"last_modified": "2011-11-14 12:40:00",
			"platforms": {
				"*": [
					{
						"version": "1.0.1",
						"url": "http://sublime.wbond.net/Prefixr.sublime-package"
					}
				]
			}
		},
		{
			"name": "SFTP",
			"description": "Commercial SFTP/FTP plugin - upload, sync, browse, remote edit, diff and vcs integration",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/sftp",
			"last_modified": "2012-08-08 08:43:00",
			"platforms": {
				"linux": [
					{
						"version": "1.10.2",
						"url": "http://sublime.wbond.net/SFTP.sublime-package"
					}
				],
				"osx": [
					{
						"version": "1.10.2",
						"url": "http://sublime.wbond.net/SFTP.sublime-package"
					}
				],
				"windows": [
					{
						"version": "1.10.2",
						"url": "http://sublime.wbond.net/win/SFTP.sublime-package"
					}
				]
			}
		},
		{
			"name": "SVN",
			"description": "Full-featured commercial Subversion plugin with a focus on usability",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/svn",
			"last_modified": "2012-08-13 02:07:00",
			"platforms": {
				"linux": [
					{
						"version": "1.5.2",
						"url": "http://sublime.wbond.net/SVN.sublime-package"
					}
				],
				"osx": [
					{
						"version": "1.5.2",
						"url": "http://sublime.wbond.net/SVN.sublime-package"
					}
				],
				"windows": [
					{
						"version": "1.5.2",
						"url": "http://sublime.wbond.net/win/SVN.sublime-package"
					}
				]
			}
		},
		{
			"name": "Terminal",
			"description": "Launch terminals from the current file or the root project folder",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/terminal",
			"last_modified": "2011-11-28 22:49:00",
			"platforms": {
				"*": [
					{
						"version": "1.3.1",
						"url": "http://sublime.wbond.net/Terminal.sublime-package"
					}
				]
			}
		},
		{
			"name": "Tortoise",
			"description": "Keyboard shortcuts and menu entries to execute TortoiseSVN, TortoiseHg and TortoiseGit commands",
			"author": "Will Bond (wbond)",
			"homepage": "http://wbond.net/sublime_packages/tortoise",
			"last_modified": "2011-11-05 23:08:00",
			"platforms": {
				"windows": [
					{
						"version": "1.2.1",
						"url": "http://sublime.wbond.net/Tortoise.sublime-package"
					}
				]
			}
		}
	]
}


  从中我们看到针对不同操作系统提供不同插件的例子,还可以看到能够直接指定使用打包好的扩展文件。在你的仓库中放置一个packages.json和一个打好包的插件,很简洁,只是你不能在源码仓库服务器上直接修改你的代码文件了。

  最后,打开  https://github.com/wbond/package_control_channel,在项目栏右方找到FORK按钮,点击,这就使你的帐号拥有了 package_control_channel 的一个仓库副本。找到你帐号里这个副本,进入,编辑repositories.json,在合适位置插入一行,内容是:

    "https://raw.github.com/你的帐号/你的插件仓库名/tag名(如master,或版本号)/packages.json",
  编辑时要注意几点:
  1、不要动别的原来内容,包括行结束符和缩进。只添加你自己的行。因为审查者会在版本服务器中对比你所做的改变,如果发现通篇每行都有变化,肯定没耐心看你究竟加了什么,以及是否对别人的内容造成破坏,结果自然会拒绝合并你的修改内容。(我好像就是习惯成自然地不小心改了缩进的设置……呵呵,毁了。话说回来,要不是这种习惯,也不会编写这样的插件了,我觉得很常用,可一直没看到别人有写,我至于这么小众吗)

  2、添加时要象原内容那样按照字母大小顺序插入到合适位置,这样会使整个名单保持明了而不是混乱。

  3、除非你需要做名称映射,否则不需要管后面的部分。

  然后保存。成功后,在项目的正上方有个“PULL REQUEST”(请求推送),即把你刚才所做的改变提交给原始的 package_control_channel 项目,等待作者审批,所以剩下的就是等待了。审批成功之后,你所添加的插件URL就会在全球ST用户安装插件的时候显示出来供下载安装了,而且也会出现在http://wbond.net/sublime_packages/community 页面上,该页面按时序显示了所有提交给P C的插件的信息(即你在packages.json中填的一些信息),比在P C安装面板中缩略显示的要详细。

  如果你没有建立和填写packages.json,P C会取你的代码仓库的最后更新日期时间作为版本号。这会造成性能上的浪费。因为P C每次启动都会检查所有插件的版本号,如果你改了一个文件,过会儿又改了另一个文件,这个过程中,全球用户可能会有不少已经安装你的插件的用户由于你的间隔更新而不断来进行插件升级。在你结束所有修改,正式决定升级插件版本之前,这肯定是不必要的浪费。所以前面提到过,建议你建立一个分支作为插件的下载URL,在你的主分支里只需要存放packages.json,在它里面用URL指出你插件的真正地址和版本。这样,只要这个文件内容不变,你的插件仓库无论怎么修改也不会引起频繁的更新。

  好了,至此关于ST汉化和插件开发及提交的教程就全部结束了。本教程主要侧重于介绍大体的流程脉络,和对一些注意要点的说明,对于插件开发语言Python没作太多说明,一是因为篇幅所限,二是因为那是另外专门的范畴。至于ST对插件开发所提供的API,可以参考ST官方网站上的API帮助文档,由于内容也较多,在此不便转述。

   PS:从去年用ST到现在,直到给一个朋友汉化插件菜单后想顺便写一下手工汉化的方法,才想到再顺便写个插件。因为象我说过的,我已经给浏览器写了这种功能的插件。不过那只是对剪贴板进行减肥整理,到编辑器里还需要再粘贴。之前对于编辑器,也给 UE 和 US 写过,不过由于某种不方便的问题,现在经常用 ST 而不是 UE/US了,所以想一想也还是值得写的。写完之后用着很爽,却也有点生气:早就应该这么干嘛。


  再PS:修订了一下内容里面一直存在却没有网友指出的一个错误:把codeload打成nodeload了,然后复制粘贴时就都延用了这个错误。不过大家能自己尝试实践的,也自然就会发现这一点了。但在我来说,既然发现了错误,还是尽量改过来。

你可能感兴趣的:(JS+VBS,Delphi,JAVA,PHP,C/C++,软件,VB,DB+SQL,ASP,HTML+CSS,JSP,Web,Python,Sublime,文本编辑,sublime,sublime,text,编辑器,plugin,插件)