Atom(Ver1.5.3)のキーバインドを変更してみる

PCの作業ツールとして最もポピュラーなのはエディタだ
永らくサクラエディタを使ってきたが最近になってSublimeTextというエディタを見つけてエディタの進化に驚きながら使いはじめていた。
あちこちで「SublimeTextと恋に落ちた」というタイトルで評判になっているようにとても良く出来たエディタなので無料で使うこともできるのだが、基本はシェアウェアとなっている。

最近になって急速にシェアを伸ばしてきたAtomというエディタがあってこちらは完全にフリーウェアだ。
私はWordstar,DelphiのDOSIDE系のキー配列が好きなのでキーバインドをカスタマイズ出来ないエディタには見向きもしない
最初SublimeTextとAtomを試してみてAtomのキーカスタマイズが取っつき難かったので消去法でSubulimeTextを使っていたが、
やはり基本シェアウェアというのがどうも引っかかるので改めてAtomのキーカスタマイズにトライして、なんとか使えるようになった。

出来てみるとキーバインドの変更に関してはSublimeTextより簡単な気がしてきた。

Atomのキーバインド変更方法についてはまだ情報がすくないようなので参考までに定義ファイルを公開してみる。

判りにくかったのは他で定義しているキーを上書きする方法で、「どうしてもうまくいかないときには元の定義ファイルを書き換えてしまえ」などと書いてあるが元の定義ファイルを変更しても上書きが出来ないし元の定義ファイルを編集しようとすると圧縮形式になっているみたいで直接編集することも出来なかった(Ver1.5.3だから?)

※元の定義ファイルを開くことは簡単で、コマンド(Ctrl+.)を実行すると下のウィンドウに押したキーに応じた定義箇所が表示される。

メニューの[Open your keymap]からユーザー定義キーマップを開いてキーバインドの変更を始めていきなり躓いたのがctrl-sの書き換えだ
このキーはwin32.jsonの中で定義されているがそれを無効に出来るまでに右往左往してしまった。

'body .native-key-bindings':
'ctrl-s': 'native!' # 他での定義を上書き

判ったのは
‘body .native-key-bindings’:という部分は元の定義で書いてある部分をそのまま引用しなければならないこと
定義を無効にするキーワードには unset! と native! があってどちらかを使うことだが、何故かctrl-sのみはnative!を指定しないと無効にできなかった。
unset!で無効にできる定義は単に新しい定義で上書きをしただけで使えるみたい。
そして’body .native-key-bindings’:の部分は他の定義を変更する場合は正確に引用しなければならないが新しく定義するためには何でもOKらしい

# 左へ移動
'ctrl-s': 'core:move-left'

この core: という部分に関しては動作ごとに決まっていて他の定義を参照して ‘core:move-left’をそのまま記述しなければならない
※最初この部分をeditorで使うのだからeditorと書くのかと思って動作しなくて嵌った

# ===================================================================
# like Delphi DOS IDE
# ===================================================================
'atom-workspace atom-text-editor:not([mini])':
# ファイルの先頭へ移動
'ctrl-q ctrl-r': 'core:move-to-top'
# ファイルの最後へ移動
'ctrl-q ctrl-c': 'core:move-to-bottom'
# 単語選択
#'ctrl-w': 'editor:'
#'body':
# 'ctrl-z': 'unset!'

'body .native-key-bindings':
'ctrl-s': 'native!' # 他での定義を上書き
'.platform-win32':
'ctrl-t': 'unset!'

'.platform-win32 atom-text-editor, .platform-linux atom-text-editor':
# 左へ移動
'ctrl-s': 'core:move-left'
# 右へ移動
'ctrl-d': 'core:move-right'
# 下へ移動
'ctrl-x': 'core:move-down'
# 上へ移動
'ctrl-e': 'core:move-up'
# 下のページ
'ctrl-c': 'core:page-down'
# 保存
'ctrl-k ctrl-s': 'core:save'
# 上のページ
'ctrl-r': 'core:page-up'
# 右の単語
'ctrl-f': 'editor:move-to-next-subword-boundary'
# 左の単語
'ctrl-a': 'editor:move-to-previous-subword-boundary'
# 行頭へ移動
'ctrl-q ctrl-s': 'editor:move-to-first-character-of-line'
# 行末へ移動
#'ctrl-z': 'editor:move-line-up'
'ctrl-q ctrl-d': 'editor:move-to-end-of-screen-line'
# カット
'ctrl-y': 'core:cut'
# インデント
'ctrl-i': 'editor:indent'
# バックスペース
'ctrl-h': 'core:backspace'
# 削除
'ctrl-g': 'core:delete'
'ctrl-t': 'editor:delete-to-end-of-word'
# grep検索(プロジェクト)
'ctrl-q ctrl-f': 'project-find:show'
# ファイルの先頭へ移動
'ctrl-q ctrl-r': 'core:move-to-top'
# ファイルの最後へ移動
'ctrl-q ctrl-c': 'core:move-to-bottom'
# ブックマークの設定・解除
'ctrl-2': 'bookmarks:toggle-bookmark'
# 前のブックマークへ
'ctrl-1': 'bookmarks:jump-to-previous-bookmark'
# 次のブックマークへ
'ctrl-3': 'bookmarks:jump-to-next-bookmark'

 

OpenOCD 0.9.0の構築

stm32Fシリーズのプログラム書き込みに自社開発のJTAGボードとねむいさんが提供してくれているOpenOCDのバイナリを使っている。

今回、タッチキーのインターフェースがあるstm32F05xを使ってみようと思って回路設計を始めてみたらなんと
JTAGインターフェースが無くてSWDを使った書き込みだけが出来るようになっている 8-O

ねむいさんのブログを見てみるとJtagKey互換のボードでSWDの書き込みに対応したバージョン0.9.0と定義ファイルを提供してくれていた :-)

ダウンロードして試してみると私の使っているWindows8.1では動作しなかったがWin7上で使えばSWD書き込みが出来ることが確認できたので「とりあえず良し、そのうちねむいさんもWin8に対応してくれるだろう。」と思ったのだが..

なんとなくすっきりしないのであちこち検索して久しぶりにツールの構築にチャレンジしてみた。 H8やSHをメインターゲットにしていた時は自分でGCCを構築していたのだが最近はすっかり横着になって誰かが構築してくれたバイナリを使うことにしている(GCCの構築って開発環境のバージョンを整合させるのがとっても面倒なのです)

build OpenOCD for windows で検索してみるとCygWinでbuildする例とかUbuntuでbuildするのが簡単とか色々あって、まずはCygwinでやってみて失敗。

次にUbuntuのバージョンを色々変えながらチャレンジして何とか成功したので備忘録として書いておくことにした。
少し経つと何をどうやったのか完全に忘れますから :-)

※試行錯誤して出来たことを思い出して書いているので詳細な手順についてはあやふやなところがあります。

(OpenOCDのソース)

http://www.freddiechopin.info/download/category/10-openocd-dev/でダウンロードしたopenocd-0.9.0-dev-swd-140623233947.7z
このファイルを解凍するとopenocd-0.9.0のバイナリが入っていてソースのダウンロード方法は source/Info.txt に書いてある。

(環境)

Windows8.1のVirtualBoxにインストールした Ubuntu 14.04 ja

(手順)

1.電子工作マスターへの歩みを参考にさせて頂いて必要なパッケージをインストール

unzip
autoconf
automake
libtool
autotools-dev
git
patch
cmake
mingw-w64-dev
g++-mingw-w64
gcc-mingw-w64
gcc-mingw-w64-base
g++-mingw-w64-i686
g++-mingw-w64-x86-64
gcc-mingw-w64-i686
gcc-mingw-w64-x86-64
binutils-mingw-w64-i686
binutils-mingw-w64-x86-64
mingw-w64-tools

その他にも色々いれたような気が 8-)

2. 同じく電子マスターへの歩みを参考にlibusb0を準備
※ 何故か、コンパイラの参照先が /usr/i686-w64-mingw32/sys-root/mingw でなく /usr/i686-w64-mingw32 になっていた。
http://sourceforge.net/apps/trac/libusb-win32/wiki
より libusb-win32-bin-1.2.6.0.zip をDLして作業ディレクトリにコピー

$ unzip ./libusb-win32-bin-1.2.6.0.zip
$ rm ./libusb-win32-bin-1.2.6.0.zip

$ cd ./libusb-win32-bin-1.2.6.0/bin/x86/
$ cp ./libusb0_x86.dll ./libusb0.dll
$ gendef ./libusb0.dll
$ i686-w64-mingw32-dlltool -d ./libusb0.def -l ./libusb.a
$ sudo cp ./libusb.a /usr/i686-w64-mingw32/lib/
$ sudo cp ./libusb0.dll /usr/i686-w64-mingw32/bin/
$ sudo cp ../../include/lusb0_usb.h /usr/i686-w64-mingw32/include/usb.h
※lusb0_usb.hをusb.hにリネームしてコピーするのがポイント、usb.hというファイルはあちこちにあるので最初はそちらを使っていたらエラーで先に進まなかった。

3. libusb-1.0をビルドする
※libusb-1.0は Ubuntu 14.04に入っているという話もあるし、apt-getでインストールすることも出来るので不要かもしれない

$ git clone git://git.libusb.org/libusb.git
$ cd ./libusb/
$ autogen.sh
$ ./configure –prefix=/usr/i686-w64-mingw32/sys-root/mingw –host=i686-w64-mingw32
$ make
$ sudo make install

4.libftdiをビルドする

$ cd ~/tool_temp/
$ git clone git://developer.intra2net.com/libftdi
$ cd ./libftdi/
$ cmake -DCMAKE_TOOLCHAIN_FILE=../../param_file/Toolchain-mingw32.cmake -DCMAKE_INSTALL_PREFIX=/usr/i686-w64-mingw32/s
$ make
$ sudo make install

5.ライブラリの名前を変更

libusb.a -> lusb.a
libusb-1.0.a -> lusb-1.0.a
と変更するかシンボリックリンクを貼る

6.ソースを用意 上に書いたsource/Info.txtの内容に従ってダウンロードとパッチをあてる

Git repositoryからソースをダウンロードして用意する
$ git://git.code.sf.net/p/openocd/code targetdir
Apply following patches:パッチをあてる
$ git fetch http://openocd.zylin.com/openocd refs/changes/84/2184/5 && git checkout FETCH_HEAD

7.コンパイル
Info.txt(source/info.txtの上のディレクトリにある)を参考にしてコンパイル

$ cd targetdir
$ ../configure –host=i686-w64-mingw32
※ Info.txtには他にもオプションがたくさん記述してあるがとりあえずこれだけでOKでした
$ make
$ x86_64-w64-mingw32-strip src/openocd.exe
※デバッグ情報を削除して出来上がったプログラムのサイズを小さくする