LoginSignup
2
0

More than 5 years have passed since last update.

Atom package自作③-② -ファイル構成-keymaps- -menu-

Posted at

概要

前回は、皆のリーダ package.jsonの説明をしました。
今回は、実行する際のトリガーの定義であるkeymapsmenuを説明したいと思います。

ファイル名 概要
keymaps アクションに対するショートカットキーを設定するファイルを格納
lib メインスクリプトとかビューファイルとかが格納される
menus ヘッダーに表示されるメニュー等を作成するファイルを格納
spec コードの検証用ツールが格納されている
styles GUIを設定するlessファイルを格納
package.json パッケージの設定ファイル
.gitignore git上で管理する為の設定ファイル

keymaps

この処理をショートカットで呼び出したい!
このパッケージをショートカットで自由にしたい。
そんな思いを適えるkeymaps
様は任意のショートカットキーとコマンドを紐付ける設定を記述するファイルです。

階層

[package]
  L[keymaps]
   Lareans.json

デフォルト コード


{
"atom-workspace": {
"ctrl-alt-o": "areans:toggle"
}
}

書式


{
  "実行する際にアクティブとなっているクラス":{
    "ショートカットキー":"実行コマンド"    
 }
}

解析

実行する際にアクティブとなっているクラス

デフォルトだと"atom-workspace"となっている。
どの層がアクティブになっている時に受け付けますかっていうのを指定する。
これが無いと例えばブラウザ?開いている時にショートカットの競合が発生するかも...
(やった事がないからわかんないけど。。。)

ショートカットキー

実際に使用したいショートカットキーをここで指定しちゃいます!
デフォルトだと"Ctrl-alt-o"なんやけど、これって毎回同じのが指定されちゃうから
複数パッケージを作成する際は重複しない様注意しないといけない、、、(自動で割り当ててくれてもいいのに。。。)
重複した時ってどうなっちゃうんだろう、、、気になります!

実行コマンド

ここでショートカットキーに割り当てるコマンドを指定します。
指定する際は、前回説明したpackage.jsonに指定したコマンド名を使用します。
ここにその儘指定したらどうなるのだろう。。。まぁjsonだから出来ないだろう。。。

 まとめ

keymapsは単純なjsonファイルだからそんなに難しい感じではない。断じてない
まぁ、纏めていく内に下記の事について気にはなったが追々調査・検証していくつもりです。。。

- 気になった事

  • keymapsは複数ファイルを実装できる様になっているが、実装した際に優先順位等が発生するか?  もしくは、設定等によって呼び出すファイルを変更する為なのか?
  • アクティブになっているクラスを指定する事が可能であるが、どのクラスを指定する事が出来るのか?
  • ショートカットキーにて重複して指定した際の挙動
  • jsonに直接ワンライナー的な感じでコマンドを指定する事は可能であるか?

じゃあ次はmenuについて説明していきます

menu

階層

[package]
  L[menus]
   Lareans.json

デフォルト コード


{
 "context-menu": {
  "atom-text-editor": [
   {
    "label": "Toggle areans",
    "command": "areans:toggle"
   }
  ]
 },
 "menu": [
   {
    "label": "Packages",
    "submenu": [
    {
     "label": "areans",
     "submenu": [
       {
        "label": "Toggle",
        "command": "areans:toggle"
       }
      ]
     }
   ]
  }
 ]
}

書式

基本

【メニュー定義クラス】:{
    "label":【ラベル名】
    "command":【実行コマンド】
}

入れ子

【メニュー定義クラス】:{
 "label":【ラベル名】
 "submenu":{
    "label":【ラベル名】
    "command":【実行コマンド】
  }
}

解析

デフォルトを見ると階層がかなり深くてわかりづらいですが、
基本的な型は[書式]-[基本]みたいな感じです。簡単だよねー
要は、【メニュー定義クラス】でどこに入れるかを指定、【ラベル名】でメニューのタイトルを指定【実行コマンド】で処理するコマンドを指定するという形となってます。
詳細は下記となります。

メニュー定義クラス

どこにそのメニューを定義したいかを指定します。
デフォルトだと3つ定義されています。[context-menu]・[atom-text-editor]・[menu]
[context-menu]・[atom-text-editor]は入れ子になっています。
[context-menu]の中にある[atom-text-editor]エリアにメニューを追加したいという感じです。
因ってデフォルトにて定義している箇所は2つ[context-menu]・[menu]となります。
階層的には
[context-menu]
  L[atom-text-editor]
[menu]

みたいな感じです。

context-menu

右クリックで出てくるメニューです。
テキスト等を修正とかする際にポインタを上迄持っていくのが面倒な時とかに使えます。
context-menuは複数のクラスがあるので入れ子で指定してあげます。デフォルトだと後述する[atom-text-editor]が指定されています。

atom-text-editor

コマンドが挿入されるデフォルトの領域になります。基本的にコマンド類はこのクラスに定義すれば良いかなと思ぅよ
その他のクラスについては追々書いていけたらなと思います。

menu

上部にあるメニューバーの事です。
menuには[file]・[Edit]・[Selection]・[Find]・[Packages]・[Help]等が並んでるかなと思いますが、
同じ様に自分で定義した名称にてメニューを追加する事は可能です。
既存のメニューに入れ子でメニューを追加する事は可能です。
デフォルトだと、[Packages]の中に作成する様になっています。

label

ここにメニューに表示させたいタイトルを記述します。
jsonなので、"label":【タイトル】ていう感じで指定しちゃいます。

command

カッコ内に指定したlabelを選択した際に実行したコマンドを指定します。
指定方法はこいつも前回説明したpackage.jsonで定義されているコマンドを指定します。

submenu

カッコ内に指定したlabelをタイトルとしてサブメニューを作成します。
サブメニュー内での指定方法は基本書式と同一です。
なので、サブメニューの中にサブメニューとか細かく神経質に分けたい人はどんどん分ける事が可能となっています!
で、labelタイトルとして使用するので、同階層にcommandを定義する事は出来ない事に注意が必要です。

- まとめ

  • デフォルトだと、右クリック時に展開される[context-menu]・上部にある[menu]が定義されている。
  • 基本的にメニューに表示させるlabel、実際に実行するcommandが対となる
  • 入れ子にする際は、commandの代わりにsubmenuを定義する。

まとめ

今回 keymapsmenusを説明したが、前回説明したpackage.jsonに定義した内容が重要となっている。
また、jsonファイルにて定義している為、目視上結構解り易くなっているかな、
基本的に最初は、基本の方を弄らず弄ばずむしろ修正しなくても何とかなるし、触れない様にしても良いかも。。。。
私的には結構変えちゃいたいと思っているので、弄り倒しちゃいますが、、、

まぁ今回はこんな感じ、次回は、いよいよ本題のlibを纏めて行きたいと思っています。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0