Surface Penの設定
yamyを使用してSurface Book2キーボードのカスタマイズを行なったところ、Surface Penのボタンが意図した通りに動作しなくなってしまった。 「ペンとWindows Ink」の設定をどう変えても常に左Windowsキーとして認識されてしまう。yamyを一時停止すると期待通りの動作をするので、yamy関連の問題らしい。
ボタンを押したときのスキャンコードを調べると以下のようになっていた。
ボタン操作 | yamy OFF | yamy ON |
---|---|---|
シングルクリック | 0x83 &VK (U-F20) | 0x6b |
ダブルクリック | 0x82 &VK (U-F19) | 0x6a |
長押し | 0x81 &VK (U-F18) | 0x69 |
.mayuに以下の設定を追加して、期待通りに動くことを確認した。
# Surface Pen def key pen_single = 0x6b # 0x83 &VK (U-F20) key pen_single = &VK(U-F20) def key pen_double = 0x6a # 0x82 &VK (U-F19) key pen_double = &VK(U-F19) def key pen_hold = 0x69 # 0x81 &VK (U-F18) key pen_hold = &VK(U-F18)
Surface Book2のキーボード設定
Surface Book2を購入して久しぶりに日本語キーボード環境に戻ってきたので設定のメモ。
やりたいこと
- 日本語配列キーボードを英語配列として使いたい
- 英語配列の外付けキーボードと共存させたい
- キーを単独で押したときと他のキーと同時押ししたときで挙動を変えたい
- ファンクションキーを押したときに、音量調整などのメディアコントロールではなくファンクションキーとして動いてほしい
- 現在の設定ファイル
日本語配列キーボードを英語配列として使いたい
yamy 0.03で問題なく英語配列に変更できる。「-DUSE109;-DUSEdefault;-DUSE104on109
」のようなオプションを付ければOK(yamy.iniの設定で escapeNLSKeys=1
が必要)。ついでに以下の点も変更。
- CtrlはAキーの左に
- 変換・無変換をスペースに
- ひらがなの「む」と「ろ」キーをそれぞれEnter, Shiftキーに
- 「ひらがな・カタカナ」キーをAltキーに
英語配列の外付けキーボードと共存させたい
設定ファイルを別々に用意することなしに、今の設定で問題なく動いている。
キーを単独で押したときと他のキーと同時押ししたときで挙動を変えたい
ワンショットモディファイヤ機能で以下のように設定
- 単押しではSpace, 同時押しではShift
- 単押しではEsc, 同時押しでCtrl
- 単押しではEnter, 同時押しではCtrl
- 単押しではAlt-Tab(アプリの切り替え), 同時押しではAlt
ファンクションキーを押したときに、音量調整などのメディアコントロールではなくファンクションキーとして動いてほしい
F1, F2(画面の明るさ調整), F7(キーボードバックライト調整)のキースキャンコードが分からない。CapsLockのようにFnを一度押せはロックされるようなので、当面はこれでOK。
現在の設定ファイル
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # 窓使いの憂鬱 - dot.mayu # Copyright (C) 1999-2005, TAGA Nayuta <nayuta@users.sourceforge.net> # # まずキーボード定義を読み込む if ( USE104 ) include "104.mayu" # 104 キーボード設定 if ( USE109on104 ) include "109on104.mayu" # 104 キーボードを 109 キーボード風に endif else include "109.mayu" # 109 キーボード設定 if ( USE104on109 ) include "104on109.mayu" # 109 キーボードを 104 キーボード風に endif endif if ( USEdefault ) include "default.mayu" # Emacs ライクなさまざまな設定 endif keymap Global # このファイルをホームディレクトリにコピーしてから、 # 以下に自分の好みのキーバインディングを設定するとよい。 # このファイル自体を変更しないこと。 # IMEの制御 key A-Space = $ToggleIME # Alt-' ' でIMEをON/OFF #key S-SPACE = $ToggleIME # Shift-' ' でもIMEをON/OFF key IC-C-m = Enter # かな漢字変換中でもC-mによる改行を有効にする # MacOSっぽく、C-1, C-2で2枚の仮想デスクトップを切り替え key C-_1 = C-W-Left key C-_2 = C-W-Right # # ワンショットモディファイヤ # # Space and Shift mod shift += !!!Space # リピート有り key R-*Space = &Ignore # ESC + LeftControl mod Control += !!Esc key ~R-*C-Esc = Esc key R-*C-Esc = &Ignore # Enter + RightControl mod Control += !!Enter key ~R-*C-Enter = Enter key R-*C-Enter = &Ignore # Backspace + Alt mod Alt += !!!Backspace # リピート有り key ~R-*C-Backspace = Backspace key R-*C-Backspace = &Ignore # Altを単体で押した場合はAlt-Tabにする (なぜか右Altはうまく動かないのでAltは両方とも左Altにしておくこと) mod Alt += !!LeftAlt key ~R-*A-LeftAlt = A-Tab key R-*C-LeftAlt = &Ignore # C-[をEscに key C-LeftSquareBracket = Esc Escape # # SurfaceBookキーボード用 # # 変換・無変換をSpace and Shiftに mod shift += !!変換 key R-*変換 = &Ignore mod shift += !!E0無変換 key R-*E0無変換 = &Ignore # ひらがなをLeftAltに # key *E0ひらがな = $ToggleIME # ひらがな でIMEをON/OFF def subst *E0ひらがな = *LeftAlt mod Alt += !!E0ひらがな key ~R-*C-E0ひらがな = A-Tab key R-*C-E0ひらがな = &Ignore # 英数をEsc+Ctrlに def subst *E0英数 = *Esc mod Control += !!E0英数 key ~R-*C-E0英数 = Esc key R-*C-E0英数 = &Ignore # Enterキーが遠いので「む」キーもEnterとして使用 def key kinesis_sp = 0x56 # kinesisとの共存用に左手下の |\ は表記通りに使う def subst *kinesis_sp = *YenSign def subst *RightSquareBracket = *Enter # # アプリ固有の設定 # # web browser window Mozilla /:MozillaWindowClass$/ : EmacsEdit window Chrome /chrome\.exe:/ : EmacsEdit window Edge /ApplicationFrameHost\.exe:/ : EmacsEdit ## MS-Office window Outlook /OUTLOOK\.exe:/ : EmacsEdit window POWERPNT /POWERPNT\.exe:/ : EmacsEdit window Excel /EXCEL\.exe:/ : EmacsEdit ## explorer window Explorer /Explorer\.exe:/ : EmacsEdit ## Evernote window Evernote /Evernote\.exe:/ : EmacsEdit
pythonでのcomment-dwim挙動変更
pythonでプログラムを書く際、Emacs+ Patchedに含まれているcomment-dwimという機能のお世話になっている。この機能を使うことでIntelliJのIntention ActionのようにIDEが空気を読んで適切なコメントアウト処理をしてくれるようになる。たとえば、以下のような処理を同じキー操作で行なうことができる。
- 行に何も書かれていなければ、' # 'を挿入してコメント記載の準備をする
- プログラムが書いてある行では、末尾に' # 'を挿入してコメント記載の準備をする
- 既にコメントが記載されている行では、コメント文の先頭までカーソルを移動させる
- 範囲選択中であれば、選択行をまとめてコメントアウトする
ただ、pythonでプログラムを書いている時はcomment-dwimで挿入されるコメントが' # '(空白 + # + 空白 + 空白)になってしまい、内蔵のPEP8チェッカから「コードとコメントの間は少なくとも2スペース以上空けましょう」とか「1行コメントは '# 'で始めましょう」という注意を受けていた。
せっかくEmacs+ Patchedを自分でビルドできるようになったので、試しに修正してみた。 CommentHandler.javaのMultiCaretCodeinsightActionHandlerを以下のように変更する。
// 変更前 protected String getEmptyLineComment() { return ' ' + myLineC + ' '; } // 変更後 protected String getEmptyLineComment() { if (myLineC.equals("# ")) { myLineC = " #"; } return ' ' + myLineC + ' '; }
pythonプログラムを編集している間は、myLineCの値が'# '(# + 空白)になっている。このため、getEmptyLineComment()は' # '(空白 + # + 空白 + 空白)を返すようなっていた。これを逆の' #'にすることで、最終的に返ってくる文字列が' # '(空白 + 空白 + # + 空白)になるようにした。
python以外の#をコメント行に使うプログラミング言語が混在してきた場合の影響は不明だが、CLionでc++とpythonのプログラムを書く分には意図した通りに動作している。
IntelliJ用のプラグイン Emacs+ Patchedをローカルでビルドできるようにする
以下の公式ページで配布されている版では、対応するIntelliJのバージョンが細かく指定されている。2018.2がリリースされると動かなくなる可能性が高いので、自分でもビルドできるようにしておく。 plugins.jetbrains.com
まずは、githubからソース一式をダウンロードして、適当な場所に展開する。 github.com
IntelliJ CE 2018.1でプロジェクトを開くと以下の2つのエラーが発生している。
- 3 modules cannot be loaded
- Invalid VCS root mapping
3 modules cannot be loadedの方は、ログを開くと問題のファイルがチェックされた状態になっているので[Remove Selected]ボタンをクリックする。
Invalid VCS root mappingの方は、とりあえずはバージョン管理システムを使用しないことにして、VCSの設定をクリアしてしまう。
次にbuild.gradleのpublishPluginの設定でエラーになる。この設定はプラグインを一般に公開する場合に必要になる設定のようなので、とりあえずダブルクォートで囲んで文字列にしてしまう。
gradleの設定画面を開いて、[Use gradle wrapper task configuration]の方に変更する。
ここまで設定すると、バックグラウンドでタスクが動き出しツールのダウンロードとビルドが始まるのでしばらく待つ。以下のように全ての結果が緑色のOKになれば準備完了。
./src/main/resources/META-INF/plugin.xml を開いて、until-buildの値を変更する。
IntelliJウィンドウの右側にある[Gradle]タブを開き、[Tasks]-[build]-[jar]をダブルクリックする。
15秒ほどで build/libsの下に.jarファイルが生成されるので、プラグインとして手動でインストールする。
Emacs+ Patchedプラグインへの手動パッチ
CLion 2018.1にEmacs+ Patchedプラグイン(0.3.300)をインストールして使っていたけど、IDE Fatal Errorsというイベントが頻繁に発生するようになった。詳細メッセージを読むと「Argument for @NotNull parameter 'name' of com/mulgasoft/emacsplus/EmacsPlus.resetCommand must not be null」となっている。
いろいろと検索してみると、そもそも2018.1で0.3.600が動かなくなったのは、プラグイン内部に「until-build="173.*"」という設定があるためらしい。 github.com
JetBrainsのサイトから0.3.600の.zipファイルをダウンロードして確認したところ、.jarファイル内のMETA-INF/plugin.xmlに確かにそのような記載があった。この部分を「until-build="183.*"」と書き換えて[Preferences]-[Plugins]-[Install plugin from disk ...]から手動でインストールした。 plugins.jetbrains.com
今のところ、2018.1で0.3.600が問題なく動作している。
2018.04.04追記
2018.1に対応したversion 0.3.700 が公開されたため、手動での変更は不要になった。ただ、このバージョンも「until-build="181.*"」という記載が残っているため、2018.2では同じ問題が発生する。
CLionの設定
c++の勉強のために開発環境としてCLionをインストールした。 現在利用させてもらっているプラグインの設定・使い方メモ。
- C/C++ Single File Execution
1つのプロジェクト内で独立したc/c++プログラムを書きやすくするツール。 CLionではプロジェクトにファイルを追加した場合でCMakeLists.txtを編集する必要があるが、これを1クリックで自動化できる。プログラミングの勉強やAtCoder, yukicoderなどでプログラムを書く時など、1ファイルごとに独立したmain関数がある時に便利。
プロジェクト内にファイルを追加する際、[Add to targets]は外しておく。
このままだと、This file does not belong to any project target... と怒られるので、右クリックして[Add executable for single c/cpp file]を選択する。
CMakeLists.txtに自動的にファイルが登録され、単体でコンパイルできるようになった。
- Emacs+ Patched
キーマップを、よりemacs風にするためのプラグイン。元々はEmacs+というプラグインだったが、JetBrainsのIDE 2017年版ごろから動作しなくなったため有志によるパッチ版が公開された。M-; で comment-dwimコマンドが使えるようになるので非常に便利。