2015/01/25

選択したパスやURLをエクスプローラで開くSublimeTextのPackageをつくってみた

初めてSublimeTextのPackageを自作した話。

SublimeTextでMarkdown記法を使い、自分用Wiki(メモ)を書いている。
ただ「Monokai Extended」というMarkdownのハイライトをしてくれるPackageを導入してから、HTML化しなくなった。

だから、以下のようにメモしておいたパスやURLを、いったんコピーして「名前を指定して実行」に貼り付けて開いていた。

メモとか参考資料とか
----------------------------------------
* [○○ドキュメント](\\192.168.1.1\hoge\documents)
* [設定シート](\\192.168.1.1\hoge\setup\setup_sheets)
* [タスク管理](http://localhost/task)

また、HTML化するにしても「file:///」を先頭に書かなければならないのも面倒だった。

ということで初めてSublimeTextのPackageをつくってみた。



下準備


以下のディレクトリにPackage用のフォルダを作成する。
  • ポータブル版:[略\Sublime Text Build 3065\Data\Packages]
  • インストール版:[C:\Users\ユーザ名\AppData\Roaming\Sublime Text 3\Packages]

今回は「OpenDir」というフォルダを作成した。
このフォルダにいろいろ突っ込んでいく。

このPackageができたときには、次のような階層になる。

Packages\OpenDir
   - OpenDir.py
   - Default.sublime-commands
   - Default (Windows).sublime-keymap


メイン(選択したパス・URLをエクスプローラで開く)

メニューバーから[Tools] > [New Plugin]をクリック。
表示されたテンプレートの名前を「OpenDir.py」にして、先ほど作成した「OpenDir」フォルダに保存する。

この「OpenDir.py」に処理を書いていく。
※ Pythonは使ったことがないので、手探り感満点w
import sublime, sublime_plugin
# Explorer起動のためにインポート
import os

# メソッド名は「Package名+Command」で記載する ※CamelCaseで書く
class OpenDirCommand(sublime_plugin.TextCommand):
  def run(self, edit):

    # self.view.sel() : 選択範囲が格納させる(複数ある場合も)
    for region in self.view.sel():
      if not region.empty():

        # self.view.substr : 選択範囲にあるテキストを取得
        path = self.view.substr(region)

        # 選択範囲のパスをエクスプローラで開く
        os.system('explorer ' + "\"" + path + "\"")



コマンドを設定する

[Shift]+[Ctrl]+[p]で起動するコマンドパレットに、今回つくったOpenDirを表示させる。

先ほどの「OpenDir」フォルダにDefault.sublime-commandsというファイルを作成し、JSON形式でコマンドの設定を行う。

[
  {
    "caption": "OpenDir: 選択したパスを開く",
    "command": "open_dir"
  }
]

  • caption:コマンドの説明を書く。コマンドパレットで検索しやすいように、「コマンド名+コマンドの説明」と書くのが一般的
  • command:コマンドを書く。用途は?だが、メソッド名から「Command]を消して、snake_case(スネークケース)で書く

これで、コマンドパレットから「OpenDir」を呼び出すことができるようになった。



キーバインドを設定する


いわゆるショートカットキーの設定。
今回は[Shift]+[Ctrl]+[o]で「OpenDir」を起動したい。

「OpenDir」フォルダにDefault (Windows).sublime-keymapというファイルを作成する。
※ Mac:「Default (Mac).sublime-keymap」、Linux「「Default (Linux).sublime-keymap」

これまたJSON形式で設定する。

[
  {
    "keys": ["ctrl+shift+o"], "command": "open_dir"
  }
]

  • keys:ショートカットキーを設定する
  • command:メソッド名から「Command」を消して、snake_case(スネークケース)で書く。不思議なことにこれで紐付いてくれる


これで[Shift]+[Ctrl]+[o]で選択したパスやURLが、エクスプローラで起動できるようになった。



以上

written by @bc_rikko

0 件のコメント :

コメントを投稿