RSS

Sublime Text 2で編集中のファイルの種類を取得する


Sublime Text 2のConsoleでなにかしていたり、pluginの作製などをしていると現在編集しているファイルの種類を取得したくなることがあります。
viewオブジェクトを利用して取得してみましょう。
ここではConsole上で操作する場合を考えます、plugin開発中の場合は self.viewとなります。

さて、以下のように拡張子をとる方法もあるのですが、

[python]
>>> import os
>>> os.path.splitext(os.path.basename(view.file_name()))[[1]]
[/python]

以下のようにすると、sublimeが管理しているscope_nameを取得することができます。
[python]
>>> view.scope_name(view.sel()[0].begin())
[/python]
ここで表示されるのはメニューから[view] – [Syntax]と辿って選択されているファイルの種類に基づくものです。
拡張子や内容に基づくものではないので、ユーザーの設定によっては正しくない場合があります。
しかしscope_nameはKeymap、プラグイン、ビルドシステムの実行判定などにも使われるのである程度信頼できると思っていいでしょう。

結果を見てみましょう。
新規作成してまだなにも書き込んでいない状態で、Syntaxをpythonにして以下を実行してみます。
[python]
>>> view.scope_name(view.sel()[0].begin())
u\’source.python \’
[/python]

最後のスペースが気になりますがわかりやすい文字列が取れていますね。

続いてpythonスクリプトが記述された状態で、いろいろな場所にカーソルを当てて実行してみてください。
[python]
>>> view.scope_name(view.sel()[0].begin())
u\’source.python string.quoted.double.block.python \’
[/python]
souce.pythonの後に何か追加されました。
これは現在の選択位置(sel)に基づいてscope_nameを取得しているためです。
上の例ではpythonでダブルクォートで囲まれた文字列ブロックといった意味でしょうか。
とりあえず後半はいらないので、ファイルの種類の判定に使えそうな部分だけ取り出しましょう
[python]
>>> view.scope_name(view.sel()[0].begin()).strip().split(\’ \’)[0]
u\’source.python\’
[/python]

それらしい文字だけになりましたね。
scope_nameについては次のエントリーで簡単に説明します。

  1. コメントはまだありません。

  1. トラックバックはまだありません。

*