なかなか苦戦したので備忘録
動機
Emacsでは,行の途中でtabキーを押しても行全体がインデントされるんですが,Atomではカーソルの場所にtabが挿入されます.
しかし,Atomにはオートインデントのコマンドが存在するので,これをtabキーに割り当てればいいじゃないかと思い,割り当ててみました.
確かに,上で指摘した動作にはなるのですが,カーソルが行頭にあるときはカーソルはその位置のまま留まります.
僕的にはその行の最初の文字までカーソルが動いて欲しい…!
ctrl-a使えばいいじゃんって話
てことで,そこも解決できるように練習がてら作ってみました.
練習ついでにパッケージにして作りました.
これがどんどんemacsのinit.elのように肥大化していくんだろうなぁ
パッケージの作成
Package > Package Generator > Generate Atom Package
を選ぶだけでひな形が作成されます.
今回は,パッケージの名前を"my-package"としました.
Keymaps
キーバインドの設定
'atom-text-editor:not([mini])':
'tab': 'unset!'
'tab': 'my-package:indent'
元のキーバインドを解除,新しく定義したものをセット
menus
右クリックのメニュー(コンテキストメニュー)や,メニューバーでの振る舞い?の設定のようです.
label,command
らを適宜書き換える.
(今回は使わないので単にコメントアウトしました.)
lib
本体
module.exports =
subscriptions: null
activate: ->
@subscriptions = new CompositeDisposable
@subscriptions.add atom.commands.add 'atom-workspace',
'my-package:indent': => @indent()
deactivate: ->
@subscriptions.dispose()
indent: ->
if editor = atom.workspace.getActiveTextEditor()
for cursor in editor.getCursors()
if cursor.getBufferPosition().column == 0
cursor.moveToFirstCharacterOfLine()
for selection in editor.getSelections()
selection.autoIndentSelectedRows()
やってることは,
if カーソルが行の先頭
then 行の最初の文字まで移動
選択行を自動インデント
詳しくは以下を参考に
ひぃひぃとドキュメント見ながら実装したわけだけど,各メソッドがどのクラスのメンバ関数なのかが読み取れずに苦労しました.
どこに書いてあるんだろう.