スキップしてメイン コンテンツに移動

Emacsキーバインドとアプリケーションショートカットキーを併用

プログラミングをしながらの上下左右キーはキーボードのホームポジションを離れることもさることなら、手首を折り曲げて操作するので、最近つらいです。

そういう思いで検索してたら上記のリンクの記事を見つけました。これなら手首を酷使する事もないだろうと。

2016/03/09:記事を修正しました。
Windows10アップグレード後の挙動の記載と紛らわしい不要な情報を削除などしました。

やりたいこと

 Windows上でEmacsキーバインドとアプリケーションのショートカットキーの併用
  • Capslockキー:Emacsキーバインド
  • 左Ctrlキー:今まで通りアプリケーションのショートカットを利用
    • 例)ブラウザ上でCtrl + T:タブを開く

環境

  • Windows 7 64bit / Windows10 64bit
  • XKeymacs Version 4.0 (64bit版 xkeymacs-110830.zip)
  • KeySwap Ver.4.02

KeySwapの設定

Capslockに右Ctrlを割り当てる

XKeymacsの設定

こちらを参考にさせていただきました。
XKeymacsでWindowsキーバインドとEmacsキーバインドを併用する方法 - 地平線に行く
http://d.hatena.ne.jp/chiheisen/20100605/1275752452
  • キーボードレイアウトは変更しない
  • プロパティ
    • 「ダイアログにはダイアログ専用の設定を利用する」のチェックを外す
    • 「詳細」タブの カテゴリから「その他」
      • デフォルトの状態を忘れましたが、コマンド一覧から「C-」を選択し、割り当ては「Right Ctrl」のみにする
その他、標準的なEmacsキーバインドをカスタマイズしてかなり独自なキー割り当てになっています。

少しEmacsキーバインドを使ってみて

早速このブログはEmacsキーバインドで編集しながら書いています。慣れなくてかなりぎこちない操作をして労力を使います。手の移動が少なくて済んでるのは実感できますが、油断するとバックスペースとか押してしまいホームポジションから手を離してしまいます。

その他参考

メモ

  • なぜXKeymacsなのかという点
    • Left CtrlとRight Ctrlを区別して扱えかえる点なのですが、keyhacでもPythonコードを編集すればいけるのかも?でもGUIで変更する方が扱いやすいですかね...
  • Page UpがM-vな件
    • MはEscを一度押すというもの。Escキーでウィンドウを閉じてしまうタイプのものには使えない?例えば、Evernoteのノートを子Windowで開いてる時にM-vすると閉じてしまう。押しっぱなしで使えないので連続して押せない。
    • Q&AにはEscを無効にするようにという記述があったが、Escを無効にするとXKeymacsも反応しなくなるので、XKeymacsだけ有効にする方法が不明
    • 今はEscキーを使わず別のキー割り当てた。
        • 例えば、Page Donw : Ctrl + V、Page Up:Ctrl + Shift + Vというように
  • C-Spaceの解除方法
    • 一度Shiftキーを押すと解除される
  • Evernoteではショートカットが反応してしまう。

Windows10になってから

Evernote Windowsクライアント

CapsLockに右Ctrlを割り当てているので、Windows7の時はCapsLockを押しても通常のCtrlと変わらない動きをしてしまい、Emacsキーバインドとの併用ができませんでした。そのため、複雑なこと(※1)をして無理矢理動かしてましたが、Window10になってから、CapsLockを押してもXkeymacsが先に反応するようで、上記のみの設定でうまくいっています。(※2)

ただし、そんな挙動なのでEvernoteを起動してからXKeymacs起動(常駐)させるという手順を踏まないといけまんせん。面倒ですね。

※1:Evernote利用時は右CtrlをPauseキーへ送信するよう、「Keyboard Butler ~鍵盤の執事くん~」で設定し、XKeymacsで右CtrlとPauseをキーバインドの対象としていました。

※2:Pauseキーを利用していた時は、Pauseキーをショートカットの対象にしないATOKがうまく反応しない問題がありましたが、Windows10から使わなくなったのでこの問題も発生しなくなりました。

XKeymacs

設定の書き出しができない。どうしよう....

コメント

このブログの人気の投稿

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

Eclipseで一通り基本的なGitを使ってみる

備忘録的にまとめておきたいと思います。おかしな点があればご指摘いただければ幸いです。 目次 環境 プロジェクト作成~初コミットまで コミットの履歴&差分を見る 元に戻す ブランチについて ブランチを作成してみる ブランチを統合するには マージする Rebaseする ローカルリポジトリからプロジェクトを取り込む コミットしたメッセージの修正 環境 Eclipse IDE for Java Developers:Juno Service Release 1 Git:上記Eclipseのプリインストール版