Emacs使いがWindows10/WIndows11で行う初期設定メモ

# 初めに

過去の「しがらみ」で指が勝手にemacsキーバインドの操作を行うような人間が、Windows10 のノートを使わざるを得ないときに、少しでも快適に使うための試行錯誤メモです。WindowsPCリプレースを機会にメモしていってます。

# キー関連の設定

## ctrl-capsの入れ替え

多くのemacs使いは「A」キーの左側にCtrlがあるべきと考えるはずなので、真っ先にctrlとCapsLockのキーの入れ替えをします。
多くの場合は、microsoftが提供している[ctrl2caps](https://docs.microsoft.com/en-us/sysinternals/downloads/ctrl2cap)のインストールで解決できます。VAIOなど一部は、メーカー独自機能（「VAIO設定」など）でCtrl-Capsの入れ替えができるようですが、VAIOの場合は後述する keyhac とうまく共存できませんでした。
[ctrl2caps](https://technet.microsoft.com/ja-jp/sysinternals/bb897578.aspx)をダウンロードし、Ctrl2cap のファイルを解凍したあと、**管理者権限で**コマンドプロンプトなどから "ctrl2cap /install" を実行します。実行後に再起動と、エクスプローラでダブルクリックではインストールできないのに注意。

Aの左がCtrlな[Happy Hack Keyborad](https://happyhackingkb.com/jp/)などのほか、CapsLockキーと左Ctrlキーを入れ替え機能、交換用キートップが付いているキーボードを使う方法もあります。[RealForce](https://www.realforce.co.jp/products/index_office.html)や[Majestouch Convertible 2](https://www.diatec.co.jp/shop/det.php?prod_c=4056)など高価ですが、作り続けて欲しいです。

これらで対応できない場合は、レジストリを直接変更して強制的に［Caps］と［Ctrl］キーを入れ替える方法もあります。参考： https://ascii.jp/elem/000/000/927/927191/

## 日本語変換

### Windows10 2004以前の場合
私のIME入力切り替えの好みは Ctrl+\ なので、この設定をします。タスクバーのインジケーター領域にあるIMEアイコンを右クリックし、プロパティ⇒詳細設定⇒「全般」のキー設定で変更します。「キー設定」で、キー「Ctrt+￥」を追加し、面倒なのですべての項目で「IME-オン/オフ」を設定します。

### Windows10 2004以降の場合
**Windows10 2004からは上の方法が使えない**ので、MacOSと同じように、IMEの入力切替を Ctrl-Space に、日本語キーボードならば「変換」と「無変換」にも割り当てます。IMEアイコンを右クリックし、「設定」⇒「キーとタッチのカスタマイズ」を選択し、「キーの割り当て」で無変換キーを「IME-オフ」、変換キーを「IME-オン」、Ctrl+Spaceを「IME-オン/オフ」とします。

2004より前と同じように設定するには、旧IMEに戻してからキー設定を行う方法があるようです。Windows updeteで更新した場合、旧IMEのキー設定は新IMEに引き継がれているようです。
参考：旧IMEに戻す方法　https://snow-white.cocolog-nifty.com/first/2020/04/post-653532.html

## keyhac

プロセスごとにキーバインドを変えられるkeyhacを導入します。たまに動作が怪しくなる時もありますが、ほとんどの場合は強制終了し再起動することで復帰できるので、現状ではいちばん使えると思ってます。

### インストール

keyhacの最新版を https://sites.google.com/site/craftware/keyhac-ja からダウンロードし、適当なフォルダに展開します。私はデスクトップにtoolsというフォルダを作り、圧縮ファイルに含まれるkeyhacフォルダ以下一式を展開、コピーしてます。

[github](https://github.com/crftwr/keyhac)からもダウンロードできますが、こちらには、pythonXX.dll が含まれていないので、必要はdllファイルを、[dll-files](https://jp.dll-files.com/)などからダウンロードして、keyhacと同じフォルダにコピーします。

### キーバインド設定

キーバインドの設定は、[Fakeymacs](https://github.com/smzht/fakeymacs)を参考にさせていただいています。zipファイルなどでダウンロードし、含まれているconfig.pyを、keyhacと同じディレクトリにコピーします。

keyhac.exe を実行（もしくは設定のリロード）で、設定したキーバインドに変換されます。keyhacと設定ファイルにバージョンにずれがあると正しく動かない場合があることに留意。

### 自動起動

特定ユーザでログインしたときのみ実行するようにします。下のフォルダに、keyhac.exe のショートカットを貼り付けます。

C:\Users\[UserName]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

起動時にpythonXX.dllが見つからないエラーがでる場合は、keyhacを配置したフォルダを環境変数Pathに追加します。

参考：https://www.javadrive.jp/python/install/index3.html#sectionl

### 設定チューニング

keyhac起動後、常駐エリアのアイコンを右クリックし、「設定を編集」をクリックするとを設定ファイル config.py が編集できます。このファイルでキーバインド自体の設定に加えて、キーバインド変更の対象外ソフトも指定できます。

#### Ctrl-Space をIMEオン／オフで使う

Ctrl-Space をIMEオン／オフで使うために、下記行の先頭に # を追加しコメントアウトする。

```
# define_key(keymap_emacs, "C-Space",   reset_search(reset_undo(reset_counter(set_mark_command))))
```

#### キーバインド変更の対象外ソフトの指定

キーバインド変更しないソフトの実行ファイル名を、設定ファイル内の not_emacs_target に追記していきます。一例は下の通り（少し古いかも）

```
    not_emacs_target     = ["bash.exe",           # bash
                            "mintty.exe",         # mintty
                            "emacs.exe",          # Emacs
                            "emacs-X11.exe",      # Emacs
                            "emacs-w32.exe",      # Emacs
                            "gvim.exe",           # GVim
                            "RLogin.exe",         # rlogin
                            "xyzzy.exe",          # xyzzy
                            "VirtualBox.exe",     # VirtualBox
                            "ubuntu.exe",         # ubuntu on wls
                            "wsl.exe",            # Windows Subsystem for Linux(ubuntu)
                            "WindowsTerminal.exe", # Windows Terminal
                            "OpenConsole.exe",    # WindowsTerminal
                            "mstsc.exe",          # リモートデスクトップ
                            "TurboVNC.exe",       # TurboVNC
                            "vncviewer.exe"]      # UltraVNC
```

これらのカナでIME起動のみ変更したい場合は ime_target に追記します。私はターミナルソフトを追加してます。

# その他

キーバインドとは直接の関係ないものの、定番的に行う設定のメモです。

## Windows Subsystem for Linux2 (WSL2)の準備

WSL2 は、Windows10のバージョン2004、ビルド19041以降で使えます。

### Windowsの設定変更

GUIなら、「コントロールパネル」の「プログラム」の「Windowsの機能の有効化または無効化」を表示し、「仮想マシン プラットフォーム」のチェックボックスをオンにします。WSL1も併用するなら、「Linux用Windowsサブシステム」もONにします。

CUIなら、管理者権限で PowerShell を開き、以下を実行します。

```
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

反映のため再起動します。

### WSL 2 Linux カーネルの更新

https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel から「最新のWSL2 Linuxカーネル更新プログラムパッケージをダウンロード」をクリックしてWSL2のカーネルの更新パッケージ（wsl_update_x64.msi）をダウンロードして実行します。下のようなエラーメッセ意義が出る場合は、msiファイルを右クリックしてアンインストールを選択などで、削除・再インストールで回避できることがあります。

```
this update only applies to machines with the Subsystem for linux
```

### デフォルトバージョンの設定

今後すべてWSL2を使う場合はデフォルトを変更しておきます。PowerShell を管理者モードで起動し、以下を実行します。

```
wsl --set-default-version 2
```

インストール済のディストリビューションは wsl -l で確認でき、WSLのバージョンの個別設定は、wsl --set-version ＜ディストリビューション名＞ 2 （または1）で行います。例：

```
wsl --set-version Ubuntu-20.04 2
```

## Windows Subsystem for Linux (wsl1)の準備

GUIなら、「コントロールパネル」の「プログラム」の「Windowsの機能の有効化または無効化」を表示し、「Linux用Windowsサブシステム」をONにします。

管理者権限で起動したPowerShellに下記コマンドを実行してもよいらしい。

```
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```

以上の作業のあと、**再起動**すれば有効になります。

## Ubuntu on Windowsのインストール

次に、Microsfot Store を立ち上げてWindows上で動作するLunuxをインストールします。慣れているディストリビューションに近いものを選択すると、馴染みのパッケージ管理ツールなどがつかえるので便利でしょう。私は、（いつの間にか３種類選べるようになっていたubuntuの中から） ubuntu-18.04 LTS を選びましたが、バージョンが違うものも共存できるようです。

### 初期設定

wsl1でubuntuを立ち上げると、最初にユーザ名とパスワードを入力します。これだけで、sudoができる状態でコマンドラインが使えるようになります。あとはアプリ等のインストールなので、とりあえずemacsをインストールします。

```
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install emacs
```

タイムゾーンの変更は下記コマンドで、JSTならAsia/Tokyoを選ぶ。

```
sudo dpkg-reconfigure tzdata
```

あとは好みの設定。コマンド出力を日本語にするには日本語パッケージを入れてlocaleを更新。

```
$ sudo apt -y install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8
$ sudo apt -y install manpages-ja manpages-ja-dev
```

初期状態のubuntuターミナルのプロパティから、オプションタブでカーソルサイズを「中」、フォントタブで、MS ゴシックの16、画面の色タブの文字を白、背景を黒にするとまずまず慣れた状態になりました。あとemacs24のデフォルトだと黒背景で見にくい色があるので、下のようにwombatテーマを設定。

```
cat ~/.emacs.d/init.el
(load-theme 'wombat t)
```

エクスプローラーでWSL内のファイルを、\\WLS$ というネットワークドライブで表示できるので、ショートカットに登録しておく。なお、ubuntu から、Windowsアプリ例えば、エクスプローラーなら explorer.exe で起動できる。

## ターミナルソフト

好みがあるでしょうが、最近は、Windows Terminal を使っている。Ctrk-K問題は、keyhacの設定変更で解消済み。

### Windows Terminal

#### インストール
 
Microsoft Store で Windows Terminalを検索しインストール

#### 設定

デフォルトは、PowerShell なので ubuntu に変更する。Tabの右横のメニューから「設定」をクリックし設定ファイル（settings.json）が開く。最初の方にある、defaultProfile に、下の方のlist項目にある、UbuntuのGUIDを設定する。
その他は、好みに応じて設定すればOKで、例えば作成したユーザでホームディレクトリにログインしたい場合は、lsit内で下のように下のようにする。

```  
            {
                "guid": "{07b52e3e-de2c-5db4-bd2d-aaaabbbbcccc}",  // ここは変更しない
                "hidden": false,
                "name": "Ubuntu-20.04",
                "source": "Windows.Terminal.Wsl",
                "icon": "%USERPROFILE%/ubuntu.ico",
                "fontFace": "Ubuntu Mono",
                "fontSize": 14,
                "commandline": "wsl.exe ~ -d Ubuntu-20.04 -u USERNAME" // ログインするユーザ名
            }
```

参考： https://qiita.com/whim0321/items/6a6b11dea54642bd6724

### wsltty

標準より軽くて使いやすいと思うので、
https://github.com/mintty/wsltty/releases
からインストーラをダウンロードして導入。スタートにはいろいろ選択枝が登録されますが、WSL terminal だけで十分。

参考：https://www.atmarkit.co.jp/ait/articles/1812/13/news031.html

## Windowsの設定

ここから先はオマケです。

### ウィンドウを端に移動したとき最大化しない

スタートメニューから「設定」⇒「システム」⇒「マルチタスク」を選択し、「ウインドウを画面の横またにドラッグしたときに自動的に整列する」をオフにする

### IME切り替え表示を消す

1. 画面右下のIMEアイコンで右クリックしプロパティ(R)を選択
2. 「IME入力モード切替の通知」欄の「画面中央に表示する」のチェックボックスを外す
 
### タスクバー

* タスクバーのプロパティから以下を変更
「タスクバーを自動的に隠す」：オン
「小さいタスクバーボタンを使う」：オン

## ツール類

### DropBox

私の環境では、OneDriveよりも安定しているのでこちらに移行。

### OneDrive

Office365を使っていれば、1TB使えるなど便利です。重要な Windowsフォルダー (デスクトップ、ドキュメント、画像など) として同期してしまうと、Beckyなどでこれらのフォルダにデータを置いているソフトを複数デバイスで使うと、動作がおかしくなることがあります。なので、タスクバーの通知エリアのOnedrive のアイコンを右クリックし、設定から重要なフォルダの同期を止めます。

### エディタ

WSLでemacsが使えるので、ちょっとした操作だけなら exzzy で十分。ただし、undo/redoをよく使う場合は、keyhacと競合しているので、キーバインドを変える必要があります。

### SSHクライアント

WSLで動く ubuntu on windows でコマンドラインでsshが便利。

### メーラー

さすがにrmailなどではつらいので、Becky！をインストール。BeckyはIMAPサーバでも自動振り分けできるのが便利だが固まることがあるので、eM Clientを導入。まだ振り分けはBecky!を利用しているが、何かに移行することを考え中。

### ブラウザ

個人的には[SRware Iron](https://www.srware.net/iron/)。余計な処理を行わないのでChromeよりも少し軽いとのことだが体感ではわかりません。64ビットOSならば、64ビット版をインストールすることと、Chrome用プラグインがそのまま動かないことがあるのは注意。
デフォルトブラウザにするには、「管理者として実行」した後に「SRWare Ironを既定のブラウザにする」にすると反映されます。

### インストールする拡張機能

#### LastPass
パスワード管理、サイト別のパスワード管理用。

#### https evrywhere
できるだけ暗号化したSSLでブラウジングするために利用

# 最後に

個人的に備忘録をかねて追記していきます。