はじめに
Ubuntuを始めとしたLinux環境において、TerminalでのコピーはCtrl+Shift+C、貼り付けはCtrl+Shift+Vです。
テキストエディタやWebブラウザなど、一般的にコピーはCtrl+C、貼り付けはCtrl+Vですが、Terminal上では制御コマンドと被るため、例外的にShiftを追加で押す必要があります。
その反面MacはCtrl ⌃とCmd ⌘の2つがあり、CtrlはTerminal上での制御、Cmdは汎用ショートカットキーとしての棲み分けがなされています。
MacとLinuxを両方使っている私としては、「Terminal使ってる時だけshift押さないといけないのは面倒」と感じ、LinuxでもMacと同じようなショートカットキーを使い分けれたらどんなに楽かと、「Linux cmd ctrl like mac」みたいな記事を片っ端から読み漁りましたが、私の知る限りでは国内では的を射た記事がありませんでした。
しかしながら、海外の質問サイト にて個人的な最適解を発見しましたので、ここに書き置きとして説明を残したいと思います。
環境
- Ubuntu 18.04 LTS
- Thinkpad X270
外観はTweaksでMacOS風にしてます(参考)
実装方法
CapsLockをHyperキーに置換
CapsLockをHyperに置き換え、Macで言うところのctrl ⌃として使用します。
使用頻度はさほど高くないため大抵は問題ないかと思いますが、CapsLockを殺したくない方はキーマップの変更なりをして下さい。
Tweaksが未インストールの場合は
sudo apt -y install gnome-tweak-tool
を叩いてください。
キーボードとマウス
$\rightarrow$追加のレイアウトオプション
$\rightarrow$Caps Lock Behavior
$\rightarrow$Caps Lockを追加のHyperにする
と設定することでCapsLockをHyperに設定します。
Superキー系ショートカットのコンフリクト対策
HyperはSuper(Windowsキー)と似たような動作をし、Hyper+Lなどを入力するとSuper+Lと同じ「画面をロック」が働いてしまいます。
設定次第では完全に分離することも可能かもしれませんが、個人的にSuperはあまり使わないので、Linuxの設定画面で
Super+[A-Z]を
Super+Shift+[A-Z]
に変更します。
Autokeyのインストール
Autokeyとは、予め登録しておいた文字列やショートカットキーを入力することで、それに対応した文字列・スクリプトが出力されるツールです。公式はここ。
sudo apt -y install autokey-gtk
でインストールできます。
使用方法
前準備
Autokeyは~/.config/autokey/data
下にデータが保存されます。
mkdir ~/.config/autokey/data/ctrl-hyper
で今回作成するスクリプトのフォルダを作成します。
Scriptの登録
ctrl-hyper
フォルダをクリックし、
新規$\rightarrow$Script
とすることでに上にScriptファイルを作成します。
ここではkillコマンドのスクリプトを例として作成します。
- script code欄に
keyboard.send_keys("<ctrl>+c")
を入力 - Hotkeyに
<hyper>+c
を設定 - Window FilterでDetect Wondow Properiesを選択し、常用しているTerminalのウインドウをクリック**(注意!(後述))**
gnome-terminalを使っている場合はgnome-terminal-server.Gnome-terminal
と入力してもよいです。
※注意!
Detect Wondow Properiesでウインドウをクリックしてもautokey.Autokey
が返ってくる場合があります。そのときは
xprop | grep WM_CLASS
# >>> WM_CLASS(STRING) = "gnome-terminal-server", "Gnome-terminal"
とTerminalに打ち、1つ目の返り値がインスタンス名、2つ目がクラス名に相当しますので、
インスタンス名.クラス名
をAutoKeyのフォームに入力します。
これでHyper+Cを押すことは、Terminal上ではCtrl+Cと同じ扱いとなり、killコマンドが送られることになります。
これをコピーコマンドも同様にScriptを新規作成し、
script_code : keyboard.send_keys("<ctrl>+<shift>+c")
Hotpey: <ctrl+c>
Window Filter: gnome-terminal-server.Gnome-terminal
と設定します。
以上の2つのScriptによって、Terminal上では
Ctrl+Cがコピー、Hyper+Cがkill
といった、Macとほぼ同じショートカットが実現します!!
これに加え、Ctrl+Vや、emacs由来のなどのカーソル移動系ショートカットも同様に2つのScriptを作成します。
備考&手作業の設定が面倒な貴方に
AutoKeyは1つのScriptにつき、pythonとjsonの2ファイルが生成されます。
Window Filterでは正規表現を使ったウインドウの指定が可能ですので、
「TerminalとVScodeでこのScriptを使いたい!」ってときとかは
gnome-terminal-server.Gnome-terminal|code.Code
でOKです。
いちいちGuiで登録するのが面倒な人は GitHub にファイル一式をおいていますので参照してください。