2016-08-10 8 views
3

私は崇高なテキストプラグインを作成しようとしています。私は正常に作成し、今はメニューに項目を追加しようとしています、そして、それが選択されると、プラグインを呼び出します。メニュー項目を正しい場所に挿入するのに問題があり、作成したプラグインを呼び出しています。崇高なテキストのメニュー項目が機能しない

は、私は、次のプラグインを持って言う:

import sublime, sublime_plugin 

class ExampleCommand(sublime_plugin.TextCommand): 
    def run(self, edit): 
     self.view.insert(edit, 0, "Hello, World!") 

私は

Cでフォルダを作成しました: "userNameに" \ \ Users \ユーザーのAppData \ローミング\崇高テキスト3つの\パッケージ\ "マイプラグイン "

このプラグインファイルをそのディレクトリに追加しました。私はその後、私はメニューに2つのMy PluginmyPluginアイテムを取得し、それがexitメニューの後だ、問題があるMain.sublime-menu

[ 
{ 
    "id": "file", 
    "children": 
    [ 
     {"id": "save"}, 
     {"caption": "My Plugin"}, 
     { "command": "myPlugin" } 
    ] 
} 
] 

と呼ばれるファイルに次のコードを追加しました。私はそれを保存した後にしたい。私はMy Pluginを選択したときも、私は、コンソールにエラーが表示されます。

コマンド解析できません:私はsaveメニュー項目の後にメニュー項目を追加し、メニュー項目を持つことができますどのように

myPluginというプラグインを呼び出しますか?

+1

Pythonコードで定義された 'TextCommand'の名前が' ExampleCommand'の場合、メニューから実行するコマンドは 'example'になります。 –

+1

あなたは3つの子を定義しました。 'id'、' caption'、 'command'はすべて同じJSONオブジェクトに属していなければなりません。 –

答えて

1

プラグインのコマンド名は、保存されているPythonファイルの名前から取られません。複数のコマンドを1つのファイルに格納できるように、コマンドを実装するクラスの名前から派生しています。

さらに、コマンド名はsnake casedであり、すべて小文字にする必要があります。下部ケースにつながる大文字に変換

  • (存在する場合)最後にCommandテキストを離れて投げる

    1. :あなたのクラスはそのスタイルで命名されていない場合は、サブライムはによってそのスタイルに変換します
    2. 他のすべての大文字を、アンダースコアとその文字の小文字に置き換えます。

    これは、上記の例で使用するコマンド名がexampleであることを意味します。それには大文字が含まれているため、myPluginにすることはできません。クラスMyPluginCommandMyPluginまたはmy_pluginの名前を付けると、できるだけ近くにあるmy_pluginというコマンドが作成されます。

    Main.sublime-menuの内容は、childrenの項目の適切なデータ構造に従わないため、項目が2度表示されます。メニュー項目のフィールドと構造の概要を示すものがいくつかあります(unofficial documentation on the menu format)。

    メニューの最後に項目が追加される理由は、複数のパッケージのメニューがどのようにマージされるかによって発生します。基本的には、項目にはidフィールドがあり、一意のIDを与えます。複数のアイテムが同じIDを持つときには、それらが来たパッケージがロードされた順序で一緒に連結されます。

    あなたのメニュー項目がファイルメニューを示すためにfileidを使用して、saveidが含まれます。デフォルトのメインメニューにはそのIDのアイテムが含まれていないため、メニューの最後にアイテムが貼り付けられます。

    コンソールに表示されているエラーは、キャプションがMy Pluginのメニュー項目にcommandフィールドが含まれていないためです。代わりに、それに続くメニュー項目はcommandを指定し、captionは指定しません。崇高なことは、それが見つからないのでコマンドを解析できないことを伝えています。

    あなたがやりたいために、あなたはこのようになりますMain.sublime-menuをしたい:

    [ 
        { 
         "id": "file", 
         "children": 
         [ 
          { 
           "caption": "My Plugin", 
           "command": "my_plugin" 
          } 
         ] 
        }, 
    ] 
    

    これは、上で概説したようにコマンドを実装するクラスの名前を変更したことを想定しています。

  • +0

    詳細な解説と詳細な説明をありがとう!それを受け入れてupvoteに行く!ただ一つの質問。どのようにしてメニュー項目をどこで制御することができますか? – Horay

    +0

    メニューに既に存在する 'id'値を指定すると、メニュー内のその特定の項目に続くすべての項目の後ろに項目が追加されます。異なる 'id'を持つ別の項目は、メニューの1つのセクションの終わりと新しいメニューの開始を示します。これは、新しい「id」を追加すると、メニューの最後にアイテムが置かれる理由です。 – OdatNurd

    +0

    入手しました。ありがとう! – Horay

    関連する問題