17
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Sublime Text 3 プラグイン移行情報

Last updated at Posted at 2013-06-22

移行情報の公式 URL はこちら。
http://www.sublimetext.com/docs/3/porting_guide.html

さりげなく API リファレンスにも移行情報が載っています。
http://www.sublimetext.com/docs/3/api_reference.html

Python のバージョンアップ

Python 2.6 から Python 3.3 になります。

プラグインの稼働するプロセス

Sublime Text 本体とは違うプロセス (plugin_host) になります。プラグインが落ちても連動して本体が落ちるようなことはなくなります。

イベントの排他

Sublime Text 2 では set_timeout() だけがスレッドセーフでしたが、Sublime Text 3 では全てのメソッドがスレッドセーフになります。これに伴い、イベント系にスレッドセーフでないメソッドが追加されました。従来の名前に _async がつきます。

begin_edit() と end_edit()

TextCommand として動作させる以外のシチュエーションで、begin_edit() と end_edit() が呼び出せなくなりました。

ZIP パッケージ

Sublime Text 3 では .sublime-package のままプラグインを動作させます。Sublime Text 2 では、実行前に展開していました。

モジュールのインポート

他のプラグインのインポートのやり方がシンプルになりました。例えば Packages/Default/Common.py をインポートする場合は、 import Default.comment とすればいいです。

起動時の API 使用制限

plugin_host は非同期で実行するので、若干の例外を除いて Sublime Text API はインポート時に使用できません。つまり、直書きで (関数の中でない場所に) sublime モジュールの関数を呼んではいけません。起動中は、API は休眠状態で、全てのリクエストはエラーを出すことなく無視されます。

起動時に使える API

  • sublime.version()
  • sublime.platform()
  • sublime.architecture()
  • sublime.channel()

プラグインでの対応方法

plugin_loaded() の中に入れた処理は、API が使えるようになった後で呼ばれます。plugin_unloaded() の中に入れた処理は、プラグインのロードが解除される直前に呼ばれます。

とは言うものの、Sublime Text 2 でこれらのメソッドは呼び出されません。私はこのような感じで対応しました。

init.py
import sublime

def init_xxx():
	# ここにプラグインの初期化処理

# Sublime Text 2 向け
if sublime.version().startswith('2'):
	init_xxx()

# Sublime Text 3 向け
def plugin_loaded():
	init_xxx()
17
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?