つけました
インストール
- Package Control から Install Package を選択
- Achievement を選択
使い方
実績の解除
適当に使っていると実績が解除され、その旨を伝えるダイヤログが表示される
解除済み実績の表示
メニューバーの Sublime Text > Preferences > Package Settings > Achievement > View Achievements
もしくは
⌘+⇧+,
今のところ解除した実績名しか確認できないので、その説明も見れるようにしたい(どう表示したらよいか悩み中)
リセット
そのうちリセットコマンドを実装します
今は /Users/USERNAME/Library/Application Support/Sublime Text 3/Packages/User/ にある以下のファイルを削除してください
- achievement.sublime-settings
- unlocked.sublime-settings
プルリクエスト待ってます
まだまだ実績の数が少ないのでプルリクエスト送ってください。airtoxin/Achievement
!自分で実績を実装してもあまりおもしろくないとか思っているわけじゃないです!
もしくはアイディアだけでもツイッターとかで連絡してくれれば実装しようと頑張ります。
実装済み実績はここをみてね(完全にネタバレなので)
設定周りとか
宣伝だけじゃアレなので作り方でも
sublimeのpackagesディレクトリに新しくディレクトリを作ってそこ以下に作成したパッケージのファイルを置きます。
セッティング関係のファイるはsublime-settingsを拡張子に、
コマンドパレットなどから実行できるコマンドはDefault.sublime-commandsに、
ショートカットキーの設定はDefault.sublime-keymapに、
メニューバーの設定はMain.sublime-menuに
それぞれ書きました。中身はjsonです。
詳しい書き方はSublime Text 2 プラグインチュートリアルのまとめが参考になりました。あとは他のパッケージのやつとかを参考にするといいと思います。
なぜかセッティング以外のやつはファイル名そのままじゃないと読み込んでもらえませんでした。
あとこれらの設定ファイルはテンプレート的に使われるみたいで、実際にコマンドとかで変更を加えて保存した時はpackagesディレクトリの中のUserディレクトリに保存されるようでした。
EventListenerとか
デフォルトで幾つか用意されているので、このクラスを継承してそれぞれのメソッドをオーバーライドすればイベントドリブンなコマンドが作れます。
asyncの方を使えばコマンド実行中もsublimeがロックされないので基本こっち使えばいいと思います。
用意されていないEventListenerについて
上のEventListenerクラスに用意されていない奴(ショートカットキーのイベントとか)は自分でそのコマンドを作った後にsublime-keymapの方にそのショートカットキーをオーバーライドする感じでかけば大丈夫でした。
例えばコピーショートカットのイベントはOverrideCopyCommandってクラスをsublime_pluginのTextCommandクラスを継承して作って、そこのrunメソッドでまずself.view.run_command("copy")
を実行します(runメソッドはそのコマンドが呼ばれた時に実行される)。これで無事コピーが実行されるので、その後で実行したい挙動をかけば好きなショートカットキーにイベントを追加できます。
デフォルトのショートカットキーはsublimeの Preferences > Key Bindings - Default にあるのでここで検索するといいと思います。
非同期の処理にしたい場合はthreadingをimportして
thread = threading.Thread(target=self._command_thread)
thread.setDaemon(True)
thread.start()
みたいに書いて_command_threadメソッドに処理をかけば非同期になります。
これでコマンドが作成できたのであとはDefault.sublime-keymapのファイルに
[
{ "keys": ["super+c"], "command": "override_copy" }
]
こんなかんじに追加すればショートカットキーのオーバーライドができます。
api
sublimeのapiはこことにらめっこしました。
Package Controlに登録
Package Control Channelをフォークしてrepositoryディレクトリ中のjsonファイルを編集してプルリクエストを送る。
しばらくすると自動テストが実行されて、その結果がプルリクエストの画面に表示されます。問題なければ緑色のバーが出てマージ待ちになります(私の場合は数時間でマージされました)
jsonのファイルは名前ごとに分かれているので自分のパッケージ名の所に追記しましょう。jsonの中身もパッケージ名が名前順に並んでないと自動テストで弾かれます。
中身はこんなかんじで、
{
"name": "Achievement",
"details": "https://github.com/airtoxin/Achievement",
"releases":
[
{
"sublime_text": ">2999",
"details": "https://github.com/airtoxin/Achievement/tags"
}
]
}
sublime_textが対応sublimeのバージョン
releasesのdetailsがパッケージのバージョンです。こっちのバージョンはgitのタグで管理するみたいです。
無事マスターにマージされればPackage Controlにて確認できると思います。