去年の春からリリースを始めたWindows Terminalプロジェクトは、正式版に向けて定期的に新機能の追加やバグフィックスを行ったプレビュー版を積極的に公開している。今回はバージョン 0.10に追加された新機能である「マウスインプット」を紹介したいと思う。

Windows Terminalをはじめ、ターミナルアプリケーションにおいてインプットの多くはキーボードから行うのがメインとなる。しかし、テキスト選択によるコピー&ペーストなど特定の処理を行う際には、マウスを使って操作したほうが作業が楽な場合がある。また、特定のCLIアプリケーションにおいてマウスによる操作のほうが直感的に理解しやすいこともあるだろう。そんな要望に答えるのがマウスインプット機能だ。

Midnight Commanderでマウスインプット機能を使う

実際にマウスインプット機能を体験してみよう。マウスインプット機能の恩恵を受ける代表的なアプリケーションの1つに「Midnight Commander」がある。

Midnight Commanderは、ファイル管理向けに開発されているファイルマネージャだ。Windows ExplorerのようなGUIではなくCLIベースとなっており、ターミナルアプリケーション上で動作する。ただしグラフィカルに表示されるため、CLIアプリケーションでありながらビジュアルはGUIファイルマネージャに近い。

Midnight CommanderはクロスプラットフォームのCLIファイルマネージャではあるが、今回はWSL環境上のLinuxにインストールしてマウスインプット機能を使ってみる。Windows Terminal上のUbuntuで「sudo apt install mc」と入力してインストールし、mcコマンドを実行してみよう。次のようにMidnight Commanderが起動するはずだ。

Windows TerminalのUbuntu上で動作するMidnight Commander

通常、この手のアプリケーションはほかのCLIツールと同じでキーボードで操作するようにできている。Midnight Commanderも下部にショートカットキーを表示したり、カーソルキーで操作したりできるようになっている。

キーボードを使って操作してもいいのだが、マウスインプット機能があればCLIツールでありながらGUIのように操作できるようになるわけだ。例えばMidnight Commanderのメニューで「File」にマウスカーソルを持っていき、クリックしてみよう。

するとマウスインプットによってMidnight Commanderが動作し、次のようにメニューが開くはずだ。

マウスでMidnight Commanderのメニューを開く

さらに表示されたプルダウンメニューにマウスカーソルを移動させ、メニューをクリックすることで対象のメニュー内容を動作させることもできる。そのほか、各ディレクトリにマウスカーソルを合わせてクリックすることで対象のディレクトリ以下に移動するといったことなども可能だ。

キーボードを利用したほうが操作は早いだろう。だが、全てのショートカットキーを覚えるのはなかなか難しい。よく利用する機能のショートカットキーを覚え、それ以外の部分をマウスインプットでカバーするといったやり方が現実的には最も効率が良いのではないかと思う。

Vimでマウスインプット機能を使う

Linux環境でテキスト編集を行う場合、CLIベースのテキストエディタを利用する場面は多い。Linux環境向けのCLIテキストエディタは多数存在するが、標準で入っているVimをデフォルトのエディタとして選択するユーザーは少なくないだろう。

このVimにおいて、マウスインプット機能の利用が可能となっている。Vimこそキーボードのみで操作するべきだとお叱りを受けるかもしれないが、Vim側もマウスインプットを許容する機能を提供しているため、今回紹介させていただきたい。

VimもMidnight Commanderと同様にWindowsに対応しており、PowerShellやコマンドプロンプト上でも扱うことは可能だが、こちらもWSLのUbuntu環境にあるVimを使ってマウスインプットを紹介する。

もちろん、Vimは標準ではキーボードのみの操作を想定しており、マウスによる操作は受け付けないようになっている。Vimでテキストを開いているときにマウスでカーソルを移動させることはできないし、マウスホイールによるページスクロールもできない。

その代わりマウスで文字列を選択状態にし、Windows Terminalのショートカットキーによるコピー&ペーストを行うことは可能だ。これはVim側ではなく、Windows Terminal側でマウスインプットを受け付けていることになる。

Vimはマウスインプットを受け付けないが、コピー&ペーストは可能

Vimでマウスインプット機能を使うには設定を行う必要がある。設定方法は簡単で、Vimでテキストを開いている状態で”:”でコマンドラインモードにし、「set mouse=a」と入力して設定するだけだ。立ち上げる前からこの機能を使いたい場合は、Vimの設定ファイルに上記一行を追加しておけばいい。

「set mouse=a」でマウスインプット機能を有効に

有効にした後に、再度Vim上のどこかにマウスポインタを持っていってクリックしてみてほしい。カーソルがクリックした場所に移動するはずだ。マウスホイールによるページスクロールも行えるようになっているだろう。

マウスによるカーソル移動やホイールによるページスクロールが可能となる

このようにVimでもマウスインプットを許可することでマウスによる操作ができるようになる。ただし、この機能を有効にすることでマウスインプットの挙動が変わってしまうパターンがある。それは先ほど紹介したWindows Terminalによるコピー&ペーストだ。

マウスインプットを有効にしているVimでマウスによる文字列選択を行うと、自動でビジュアルモードになってしまう。これはVim側でマウスインプットを受け付けてしまうためで、この状態ではWindows Terminalのショートカットキーによるコピー&ペーストは使用できない。ビジュアルモードで選択した文字列はVim内でのコピー&ペーストはできるが、ほかのアプリケーションにペーストすることはできないのだ。

マウスインプットを有効にしたVimでは、マウスで文字列選択するとビジュアルモードになる

この問題は、マウスで文字列選択する際にShiftキーを押しながら作業することで回避できる。実際にShiftキーを押したまま、マウスホイールでページのスクロールができるかどうか試してみてほしい。ページがスクロールしないことを確認できるはずだ。またShiftキーを押しながらマウスで文字列選択を行うと、VimはビジュアルモードにならずWindows Terminal側でコピー&ペーストが行えるだろう。

Shiftキーを押下しながらだとVim側へのマウスインプットが無効となる

なかなか気づきにくい新機能

今回は、Windows Terminal v0.10で追加された新機能であるマウスインプットを取り上げた。この機能は一部のアプリケーションのみが影響を受ける機能であり、追加されたことに気づかないユーザーも多いのではないかと思う。

しかしながら今後、Windows Terminal内で何らかのアプリケーションを利用した際、マウスの挙動に違和感を覚えることがあるかもしれない。そんなとき、「そう言えばこんな機能が追加されていたな、Shiftキーを押しながら操作すればいいんだ」と思い出していただきたい。

参考資料