ラベル Sublime Text の投稿を表示しています。 すべての投稿を表示
ラベル Sublime Text の投稿を表示しています。 すべての投稿を表示

2014年12月31日水曜日

Sublime Text : プラグインスクリプトからデフォルト、ユーザ設定値を取得する


このエントリーをはてなブックマークに追加
view.setting() で Settingクラス(公式APIリファレンス)のインスタンスが取得でき、この Setting に、デフォルト(Preferences -> Settings - Default)やユーザ(Preferences -> Settings - User)の設定値が含まれています。

has("tab_size") や get("tab_size") のように引数を指定すると値が取得できました。


プラグイン作成の練習に作った、現在カーソルがある行の文字数を表示するスクリプト(ダウンロード)で使ってみました(タブを tab_size 分の文字数としてカウントする場合の計算のため)。スクリプト作るのなかなか面白いです。

Sublime Text : 縦線(ルーラ)を表示する


このエントリーをはてなブックマークに追加


Preferences.sublime-settings で
"rulers": [20, 40, 60, 80]
のように、"rulers" をキーとして縦線を表示したい文字数の配列を設定します。

Sublime Text : プラグインでステータスバーにメッセージを表示する


このエントリーをはてなブックマークに追加
参考:Sublime Text 3 公式 API リファレンス

sublime.set_status(message) と view.set_message(key, message) の 2通りの方法があります。

それぞれの特徴は以下のとおりです。
  • sublime.set_status
    • 表示位置はステータスバーの後方(Line N, Column M の後ろ)
    • それまでその位置に表示されていた内容は消える
    • 一定時間後に自動で消える
  • view.set_message
    • 表示位置はステータスバーの前方(Line N, Column M の前)
    • 異なる key(str) を設定すれば複数の内容を表示できる(key でソートされ , で区切られる)
    • 同じ key を設定すると更新
    • 時間が経過しても消えない
処理の結果(ファイルを保存しました、など)を表示する場合は set_status、情報(現在の行の文字数など)を表示する場合は set_message を使うと良さそうです。

Sublime Text : コメントアウトコマンド(Toggle Comment)で挿入される文字列を設定する


このエントリーをはてなブックマークに追加
最終成果物は以下の2つのファイルです。
これらのファイルを Sublime Text の Preferences -> Browse Packages... で開くフォルダに保存すると、Toggle Comment コマンド実行時にテキストファイルでは > が、バッチファイルでは rem が挿入されるようになります。

BatchFileComments.tmPreferences
TextComments.tmPreferences

以下、忘備録を兼ねた解説です。


Sublime Text では Ctrl + / (Toggle Comment) でコメントアウト・アンコメントのトグルができます。

このコマンドでどのような文字列が挿入されるかは、*.tmPreferences というファイルで設定されています。

デフォルトの設定は、SublimeText 3 ではインストール先の Packages ディレクトリ(C:\Program Files\Sublime Text 3\Packages)の *.sublime-package を解凍して開いた中にあります。(ファイル名は Comments.tmPreferences が多いようですが、Python では Miscellaneous.tmPreferences でした。)

テキストファイル(.txt)にはデフォルトの設定がなく、Ctrl + / を押しても何も起こらないようだったので、">" が挿入されるような設定ファイルを作成してみました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>name</key>
 <string>CommentCommandToQuoteInText</string>
 <key>scope</key>
 <string>text</string>
 <key>settings</key>
 <dict>
  <key>shellVariables</key>
  <array>
   <dict>
    <key>name</key>
    <string>TM_COMMENT_START</string>
    <key>value</key>
    <string>&gt; </string>
   </dict>
  </array>
 </dict>
</dict>
</plist>

ポイントになるのは対象となるファイルの種類を設定する scope と、挿入する文字列を設定する TM_COMMENT_START です。name は適当で構いません。このファイルを (適当な名前).tmPreferences というファイル名で、Preferences Browse Package... で開くディレクトリ以下に保存しておくと、テキストファイルで Ctrl + / を実行した場合は行頭に ">" が挿入されるようになります。


他にも、例えばバッチファイルの場合に rem を挿入する、とする場合は scope を source.dosbatch、TM_COMMENT_START を rem にするなどで設定できます。

Sublime Text 3 : プラグインで出力ウィンドウに文字列を出力する


このエントリーをはてなブックマークに追加
基本的に SublimeTextのプラグイン作成方法 が参考になります。

ただし、Sublime Text 3 では 2 と違って begin_edit, end_edit が不要で、edit には run コマンドに渡された edit が使用できます。

また、3 の APIリファレンスでは get_output_panel はなくなっていて、同等の API として create_output_panel がありました。get_output_panel も使用できましたが、create_output_panel を使っておいたほうがよいかもしれません。

TextCommand の run 関数内を想定したコード例は以下のようになります。

window = self.view.window()
output_panel = window.create_output_panel("WindowName")
window.run_command("show_panel", {"panel":"output.WindowName"})

output_panel.insert(edit, output_view.size(), "Hello, Output")


ちなみに print 文はコンソール(Ctrl + ` で開くパネル)に出力されます。 以下のように show_panel で console を指定すればプログラムから開くことができます。
window.run_command("show_panel", {"panel":"console"})
print("Hello, Console")

2014年12月30日火曜日

Sublime Text : view.find_by_classes は int を返す


このエントリーをはてなブックマークに追加
忘備メモ。
API リファレンスによると Region を返すことになっていますが、実際は int を返すようです。

Sublime Text 3 での Packages/Default フォルダの場所


このエントリーをはてなブックマークに追加

そもそもフォルダではなくなっていました。

Sublime Text 2 では Packages/Default、Packages/Python などという形で、インストール時にデフォルトで作成されていた Packages 以下のフォルダが、Sublime Text 3 ではその中身がアーカイブファイルとして固められて (パッケージ名).sublime-package として置かれるようになっています。

つまり(デフォルトのインストール先であれば)

C:\Program Files\Sublime Text 3\Packages

以下にある *.sublime-package という名前のファイルを、 7zip などの解凍ソフトで開くとその中身のファイルを見ることができます。

各種言語のデフォルトのスニペット(*.sublime-snippet)やビルド設定(*.sublime-build)もそれぞれの言語名のパッケージ中に含まれています。

見たところ圧縮しているわけではないようなので、誤って編集されるのを防ぐ、プラグインやユーザが自作した設定との区別をより明確にする、などが目的でしょうか。

参考 : Where are the default packages in Sublime Text 3 on Ubuntu?

2014年12月28日日曜日

Sublime Text : Python 実行時の [Decode error - output not utf-8]


このエントリーをはてなブックマークに追加
以下のページが参考になりました。
Windows の SublimeText3 で整える Python3 開発環境設定 (2014/02/23現在)

使っているものが Python 2系でも、指定するパスを変えるだけで原則は同じです。

Preferences -> Browse Packages... 開くフォルダに Python というフォルダを作り、そのフォルダ以下に Python.sublime-build というファイル名で以下の内容を保存します。
(参考先と比較して、shell_cmd の $file を " で括っている点と、python の path が 2.7系である点が異なります。)

{
    "shell_cmd": "python -u \"$file\"",
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
 
    "windows":
    {
        "encoding": "cp932",   // Windowsコンソールの文字コード指定
        "path": "C:/Python27"  // 自分のPythonへのパスを追記
    }
}

Sublime Text 3 であれば
C:\Users\(ユーザ名)\AppData\Roaming\Sublime Text 3\Packages\Python\Python.sublime-build
のような場所に保存しておけば良いです。

これで Sublime Text 上から Ctrl + B で Python 実行が行えるようになりました。

もう少し詳しく Build について調べる場合は
非公式ドキュメントの Build Systems のページが参考になりそうです。