1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Ubuntu]CTRL+Cをクリップボードコピーと割り込みの兼用にする[Ghosttyターミナル]

1
Posted at

状況

私は、UbuntuをWindows11マシン上の仮想環境で動かしているのですが、Windowsのキー操作に慣れているので、(Windows標準のクリップボードコピー操作である)CTRL+C(CTRLキーを押しながらCキーを押すヤツね)で同じようにクリップボードへのコピー操作をしたいのです。
ほぼ条件反射のレベルで操作するので、違うキーはもはや無理です。

そこで、GNOMEデスクトップ標準のターミナルを使うので、ショートカット設定に、CTRL+Cにコピーを割り当てています。

問題点

CTRL+Cをクリップボードコピーに割り当てると、CTRL+Cによる標準的な中断処理ができなくなる

ここで問題になるのは、Ubuntuの多くのコマンドはCTRL+Cで終了させる必要があったり、シェルの暴走をCTRL+Cで中断する必要があったりするのに、CTRL+Cをコピーに割り当てるとそれらが効かなくなるということです。この中断がCTRL+Cであるのはプログラムのかなり深いところでハードコードになっているらしく、カスタマイズも不可能らしいです。つまり、シェルの暴走を止める手段がなく、ターミナルの別のタブからkillする位しか手段がないということです。

解決策概略

この課題を、最近、評判になっているカスタマイズ性に優れたGhosttyターミナルソフトをインストールして、設定ファイルの調整で対応しました。
設定のポイントは、
・文字列が選択されている時はクリップボードへのコピー
・未選択だと割り込み処理
とするものです。

環境説明

Ubuntu 24.04

Ghosttyについて

執筆時点で最新バージョンは、Ghostty 1.5

Ghosttyは、Mac環境ですと、Homebrewで簡単にインストールできるのですが、
Ubuntu環境ではひと手間必要です。
(*).ちなみに、Windows環境は予定はあるようですが、現在は未対応ですね。

インストール方法

有志の方がパッケージを作成してくれています。
https://github.com/mkasberg/ghostty-ubuntu
現時点では、これをそのまま使うのが現時点では一番楽そうです。

手順はこのサイトに記載されている通りで、以下です。

sudo add-apt-repository ppa:mkasberg/ghostty-ubuntu
sudo apt update
sudo apt install ghostty

うまくインストールできれば、以下のようなアイコンがアプリ一覧に追加されます。
ghostty_icon.png

このアイコンをクリックすれば、Ghosttyが起動しますが、見かけがUbuntuデフォルトのターミナルと良く似ている(そりゃそうだ)ので、以下を見て本当にGhosttyであることを確認しましょう。
ghostty_confirm.png

設定

Ghosttyの設定ファイルは ~/.config/ghostty/config で、ここに以下を追加します。

clipboard-read = allow
copy-on-select = clipboard
keybind = performable:ctrl+c=copy_to_clipboard
keybind = ctrl+v=paste_from_clipboard

keybind = performable:ctrl+c=copy_to_clipboardで、performable:となっていますが、これがトリガー接頭辞の一種で、これにより文字列が選択されている時のみクリップボードにコピーされる訳です。以後、このGhosttyをターミナルとして利用して課題は解決しました。

(おまけ)トリガー接頭辞について

Ghosttyの設定で、キーバインドにおける、トリガー接頭辞はドキュメントを読んでも
良く分からなくてかなり調べたので、ここで解説しておきます。
まず、キーバインドによる操作というのは、通常はフォーカス中のsurface(端末とかタブとかの画面のことらしい)にのみ有効です。ほとんどのターミナルはそういう動きだと思うのですが、トリガー接頭辞を付けると、これを他のタブなどにも影響させるようにも設定できるということです。

all:

そのキー操作を現在フォーカス中のsurfaceだけでなく、すべてのsurfaceに適用します。たとえば、
keybind=all:ctrl+i=text:abc
とすると、CTRL+Iキーで現在の画面にabcが入力されるだけでなく、他のタブにもabcが入力されます。

global:

そのキー操作をGhosttyが非フォーカスでもシステム全体で有効にします。
つまり、OSレベルでキーボード入力を横取り(フック)する訳です。
これはmacOSのみの対応で、アクセシビリティ権限が必要です。

unconsumed:

そのキーをGhosttyのアクションに使っても、さらに動いているプログラムにも元の入力を送る設定です。

performable:

そのアクションが実行可能なときだけ有効とします。
私の設定では、文字列が選択されている時はクリップボードへのコピー(copy_to_clipboard)が実行されて 未選択だと(Ghostty側では何もせず)端末アプリ側へ通常のCtrl+Cが送信されて、ほとんどのCLIプログラムでは割り込み処理になります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?