Post Page Advertisement [Top]

consolecoolkittyterminal emulator

おしゃれなkittyでxmonad

今までターミナルエミュレーターは、「xtermでいいやろ」とまではいわないまでも、 「urxvtでいいやん」と思っていました。 しかし、最近なんとなく、「xmonadに似合うターミナルエミュレーターで、なんかいい無いのかなー?」と探しているとき、 Linuxでも「モダンフィーチャー」とか謳ってるターミナルエミュレーターがあることを発見したのです。(まぁ、だいぶ前からあったみたいですが)


おしゃれなmacでは、ターミナルエミュレーターの定番であるiTerm2がまさに、 これぞ「モダンフィーチャー」なわけっぽいですが、 僕が今使っているのはLinux、そして、xmonad。 「xmonad使ってる奴らって、マウス嫌いとかコンソールの中から出るのが嫌とか、 時代錯誤なこと行っているおしゃれとは無縁な地味な連中だろ?」と思われているかもしれません。 でもでも、Linuxだから、xmonadだから、無骨でいなければならないわけではなく、 Linuxだって、xmonadだって、モダンフィーチャーしたっていいですよね? もう、21世紀にもなってて、シンギュラリティさえ間近なんだし。 というわけで、おしゃれ推進派のxmonadユーザーである私は、kittyを触ってみようと決心したのです。


で、モダナイズされたこのkittyというターミナル、実際に触ってみると、わりと普通に好きな感じなのです!! 何処がといえば、もちろん文字通り「モダンフィーチャー」を意識した上で、 その言葉が、宣伝文句としてだけでなく、ユーザー目線で機能的であって、 また、ちょこっと欲しくなるようなおちゃめな機能を地味に実装している様な気がするところなのです。 例えば、kittyはモダンフィーチャーを謳いながら、 kittyの設定を行うためのダイアログ等は一切持っていません。 設定は、kitty.confというテキストファイル1つで行います。 ユーザー目線で見れば、設定は結局のところテキストファイルで管理するほうが便利なのです。 しかし、一方で、設定の機動性の点で言えば、 コンソール上でkittyの専用コマンドで動的に設定を変更することができます (そのためのkittyコマンド専用シェルまで実装されている)。 この辺はまさにモダンフィーチャー!! そして、そして、githubのissueを見ていると、開発者が精力的に一般ユーザーとのやりとりをイチイチ丁寧にして、 真摯に開発を進めているようにみえる (英語でこまかいところはわからないので、僕がそう思うだけかもしれない)ところなのです。


まぁ、、xmonadもそうなんですが、、 僕は別にマイナーなものを好きになるってタイプだとは思っていないんですが、 好きになるものは何故かマイナーだったりします、、、そう、kittyもあんまり人気がなさそう。 実際、googleで検索しても、Linuxでkitty使ってるよ的な日本語での紹介ページがあまりひっかかりません。 そこで、「kittyのおしゃれさを誰かに伝えたい病」が発病して、今これを書いています。


うちの嫁さんに、おいしいものの上においしいものを乗せて食べると美味しくなるのは自明だと言ったら、 混ぜるのは良くないと反論されましたが、よいもの(xmonad)とよいもの(kitty)を組み合わせて使うと、 素晴らしく良いものが出来るは、大丈夫な自明ですよ!きっと。 というわけで、今、私的にはまさに「xmonad&kittyラブ」なのです!


ターミナルエミュレーターkitty

開発元githubやkittyの説明ページは次の通り。



で、具体的にどんなところが気に入っているかを以下に紹介します。


kittyでは画像が見れる

ターミナルの中でjpg等の画像ファイルを表示することが出来ます。 ファイルの指定はローカルにあるファイルだけでなく、インターネット上にあるものもURLを使って指定できます。(右下の猫はkittyのWebサイトにあるものを指定して表示)


コンソール上で動くファイラであるrangerでは、 画像のプレビューをkittyの画像表示機能のみで行うことも出来ます。(w3の機能でも出来る)

kittyはプログラムコード表示がカッコいい

ある特定のフォントの並びがある時に、フォントを合体させることをリガチャと呼びますが(組版用語)、 kittyでは、この機能を使ってプログラムコードの中の数学記号なんかをほんものの数学記号っぽく表示してくれます。


但し、意味的に関係のないところでもフォントの並びだけを見てリガチャが起こるので、 めちゃめちゃ実用的というわけではありませんが、kittyは、リガチャの有効、無効、カーソルを当てたときだけリガチャが外れる等の 機能があるので大丈夫です。


kittyはタブと画面分割が使える

xmonadを使っていたとしても、特に今私が使っているノートの場合、 ターミナルの画面分割機能は滅茶役に立っています。 例えば、デスクトップが、Tallレイアウトになっていて、 初めにWebブラウザを開いて次にターミナルを開くと、 画面の左側にターミナルがあり、 右側にブラウザが開かれた状態になってとても見やすい状態になっています。 しかし、ここで、ターミナルでなにか作業が進行中の場合、 もう一つターミナルを開くと、Tallレイアウトの場合、 ターミナルが一つ左側に行って、そのターミナルとWebブラウザの表示が小さくなってしまいます。


こうならないためのWindow配置は色々と有りますが、 その中で一番簡単な解決法の一つが、kittyでの画面分割です。


kittyは履歴が見やすい

ターミナルエミュレーターは、表示がどんどん進むと過去の表示がどんどん上に流れて隠れてしまいます。 通常は、マウスのコロコロや、ターミナルエミュレーターの画面の右にあるスライダーや、 Shift+PageUpとかのキー操作で、戻ってみることが出来ます。 しかし、kittyではその方法の他に、less等のビューアーに入れて表示してくれるので、 検索が簡単に出来たりします。


kittyは軽い

表示をGPUに任せて、CPUの負荷を下げるように設計されているので、 本人曰く「ヌルヌル動く」といっています。


kittyはフォント設定が得意

kittyのフォント設定で特徴的なのは、 文字コードの範囲毎にフォントの指定が出来るようkiになっている点です。 通常の文字の部分は、お気に入りのフォントにしておいて、 パワーライン用の文字の部分には、パワーライン用のフォントを指定するということが出来るようです。


また、先に紹介した「カッコいい数学記号」は、実はFira Codeというフォントのリガチャという機能が利用されています。 そして、このフォントを使いつつ、日本語表示の部分には、好きな日本語文字のフォントを指定するということが簡単にできます。


kittyは外部から操作できる

先に紹介したタブ機能、画面分割した際のその画面のレイアウトは、 実は、kitty自体の画面がxmonadの様に機能します。 そして、この立ち上げの時に、タブをどの様に構成して、レイアウトをどうして、 どの様な外部プログラムを呼び出すかを指定してkittyを立ち上げることが出来ます。


また、立ち上がっているkittyの各ウィンドウ等をkittyの持つコマンドで操作することも可能です。 更に、このkittyの持つコマンドを専用に受け付けるkittyの内蔵シェル(インタラクティブコンソール)もあったりします。 このコンソール、プロンプトが猫なのですよ!!


kittyを使ってみる

どうですか?使ってみたくなりましたか? 以下に必須になりそうなTipsを示しておきます。


キーの一覧

キーは設定も出来ますが、デフォルトで使っておくのが無難でしょう。 修飾キーのパターンは「Ctrl+Shift」なので、xmonadともかぶらないと思います。


基本作業
windows使いの方が手癖になっているかもしれないCtrl+c等ではコピペ出来ません。 また、スクロールもシフトではありません。 デフォルトでは、Ctrl+shiftがkittyのプレフィックスなので、これに慣れてしまいましょう。
キーの組み合わせ 機能
Ctrl + shift + c 選択範囲をクリップボードへコピー
Ctrl + shift + v クリップボードから貼り付け
Ctrl + shift + PageUp 画面を前へスクロール
Ctrl + shift + PageDown 画面を後へスクロール


タブとウィンドウの操作
xmonadと共存している場合も、プレフィックスがwindowsキーかCtrlキーによって、 実際のウィンドウを呼び出すのか、kittyの中にwindowを呼び出すのかを分けることが出来ます。 もちろん、以下以外にもウィンドウ等の移動も出来ますが、まずは、基本的な以下のことさえ出来ればなんとかなります。
キーの組み合わせ 機能
Ctrl + shift + enter 新しいウィンドウ
Ctrl + shift + w ウィンドウを閉じる
Ctrl + shift + ] 次のウィンドウへフォーカス移動
Ctrl + shift + [ 前のウィンドウへフォーカス移動
Ctrl + shift + t 新しいタブ
Ctrl + shift + 右カーソル 次のタブへフォーカス移動
Ctrl + shift + 左カーソル 前のタブへフォーカス移動


その他
若いうちは関係ありませんが、歳を行ってくるとフォントの大きさ調整を一発で出来るのは重要な機能になります。
キーの組み合わせ 機能
Ctrl + shift + =(イコール記号) フォントを大きく
Ctrl + shift + -(マイナス記号) フォントを小さく
Ctrl + shift + e URLをクリック
Ctrl + shift + F2キー kittyの設定ファイルをエディタで開く
Ctrl + shift + h これまでのコンソール出力をページャーで見る
Ctrl + shift + escapeキー kittyシェルを起動


設定ファイルkitty.conf

~/.config/kitty/kitty.confファイルで設定を行いますが、 kittyをインストールしただけでは、このファイルはありません。 kitty上で、「Ctrl + Shift + F2キー」すると、 設定ファイルがない場合、 設定ファルを作成した上でそのファイルをエディタで開いてくれます。 エディタは、環境変数EDITORに設定されているものが使用されます。 何も設定していない場合、viが起動されるので、 viの使い方がわからない人は、 エスケープキーを何度が押した後、 「:q!」と入力してエンターキーをすと必ず、終了させることができますので、 パニックにならないで下さい。 一旦、kitty.confファイルが出来てしまえば、 環境変数を設定してショートカットキーを使って設定ファイルを開くという流れ以外に、 自分のいつも使っているエディタで普通に直接kitty.confファイルを開いて編集することもできます。


環境変数EDITORは、~/.zshenv等で指定します。


# ~/.zshenv
export EDITOR=nvim


kitty.confのファイルには、詳しい説明がコメントで入っています。 また、デフォルトの設定やおすすめの設定がコメントになっている部分も有ります。 以下では、私のところで実際に使っている設定を紹介します。


フォントの設定

使用しているフォントは、Fira Code、IPAGothic、PowerlineSymbolsです。 archlinuxの場合以下のようなコマンドでインストールしておきましょう。(AURかもしれないですが)


$ pacman -Syy ttf-fira-code otf-ipafont powerline-fonts


kitty.confのフォント設定は以下のようになります。


# a part of kitty.conf
# フォントの設定
font_family  Fira Code

# フォントのデフォルトサイズ
font_size 14.0

# 特定のユニコード範囲を特定のフォントに割当
symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols
symbol_map U+3000-U+9FFF IPAGothic

# リガチャの有効・無効の切り替え等のキーバインド設定
map alt+1 disable_ligatures_in active always
map alt+2 disable_ligatures_in all never
map alt+3 disable_ligatures_in tab cursor


上記の設定をすれば、以下のリガチャに関する制御のキーバインドが使えるようになります。


キーの組み合わせ 機能
alt + 1 リガチャが有効
alt + 2 リガチャが無効
alt + 3 リガチャは有効で、カーソルを併せたときのみリガチャが外れる


表示領域の周りの余白

表示領域の周りに余白を取ることが出来ます。mergin系は、kitty内に開かれた各ウインドウの周囲、 padding系はそれらの大外の余白です。うちではpaddingのみを設定しています。


# a part of kitty.conf
#周辺余白の設定
window_padding_width 5


背景の透過

 コンソールの背景については、 xのコンポジターアプリを使うことで透過することが出来ます。 picomパッケージをインストールし、.xprofileや.xinitで実行しておきます。 うちでは、ディスプレイマネージャを使っているので、.xprofileの中で、以下のようにしています。 オプションは、影をつけたりのフェードイン、アウトする設定です。なくても構いません。


# .xprofileや.xinit
# コンポジタの設定
picom -f -r 10 -o 0.5 &


上記のとおりに、コンポジタが起動していれば、kittyを透過させることが出来ます。 では、以下にkitty.confの設定を示します。 まず、背景の透過は、0が完全な透明、1が完全な不透明です。


# a part of kitty.conf
#背景の透過
background_opacity 0.9


次に、背景の透明度は動的に変化させるかどうかを選択することが出来ます。 動的に変化させない設定にすると、上記の設定で固定になりますが、 動的に変化しても良い設定にすると、キー操作で透明度を動的に変更できるようになります。 デフォルトではNo(動的に変更できない)になっています。


# a part of kitty.conf
#背景透過の動的変更の可否
dynamic_background_opacity yes


この設定を行うことで、以下のキーが働くようになります。


キーの組み合わせ 機能
Ctrl + shift + a してから m 透過を強く
Ctrl + shift + a してから l(エル) 透過を弱く
Ctrl + shift + a してから 1(数字の1) 完全不透過にする
Ctrl + shift + a してから d デフォルトの透過にする


kittyへの日本語入力について

kittyでは、ibusを使った日本語の入力が出来ます。 そして、.xprofile等に次の設定が必須です。 通常のximの設定にGLFW_IM_MODULEを加えておきます。


# .xprofileや.xinit
# ibusの設定
export GLFW_IM_MODULE=ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus

ibus-daemon --xim &



配色(テーマ)について

kittyでは、kitty.confの中で配色の設定を細かくすることが出来ますが、 配色部分の設定だけをしたファイルが「テーマ」として、第三者によって配布されています。 そこで、気に入ったテーマファイルを自分のkitty.confにincludeコマンドで読み込むことで、 簡単に綺麗な配色に切り替えることが出来るようになっています。


私の使っているテーマ配布サイトは https://github.com/dexpota/kitty-themes です。ページの説明にあるとおり、kittyのホームディレクトリの中にテーマ用のディレクトリを作り、その中に、テーマ用のgithubリポジトリを以下のコマンドでクローンします。


$ git clone --depth 1 git@github.com:dexpota/kitty-themes.git ~/.config/kitty/kitty-themes


配色の見本は、githubページ上で確認できます。 気に入ったもののファイル名を確認しておきましょう。


kittyコマンドであるset-colorsを使うことで、リアルタイムにテーマファイルを読み込んで配色を変化させることも出来ます。 set-colorsは、デフォルトで読み込んだウインドウのみを変化させますが、 「-a」オブションを付けると全てのウィンドウを変化させます。 また、「--reset」オプションでデフォルトの配色に戻せます。


$ kitty @ set-colors theme_file_path
$ kitty @ set-colors -a another_theme_file_path
$ kitty @ set-colors --reset


ページの説明では、テーマ用の固定ファイル名に好きなテーマファイルをシンボリックリンクして、 そのファイルをkitty.confにインクルードする方法が説明されていますが、 気に入ったものをダイレクトにインクルードするだけでもOKです。 うちでは、幾つかのお気に入りをコメントとして書いておき、 好きなものをコメントアウトして使っています。 また、kitty.confのどのあたりで読み込めば良いか、気になるかもしれませんが、 特に自分で配色の設定をしていない限りは、どこでもOKです。 配色の設定をしている場合は、その前後によって互いに上書きし合うので、 そのあたりに配慮しましょう。


# a part of kitty.conf
# テーマの設定

#include kitty-themes/themes/gruvbox_dark.conf
#include kitty-themes/themes/gruvbox_light.conf
include kitty-themes/themes/Monokai_Pro_(Filter_Machine).conf
#include kitty-themes/themes/Galaxy.conf
#include kitty-themes/themes/Github.conf
#include kitty-themes/themes/Borland.conf
#include kitty-themes/themes/Solarized_Dark_Higher_Contrast.conf
#include kitty-themes/themes/Solarized_Darcula.conf



kittyを操作する

kittyを操作するには、allow_remote_controlオブションがyesになっている必要が有ります。kitty.confの該当項目を以下のように設定しておきましょう。


# a part of kitty.conf
allow_remote_control yes


上述の設定をした状態で、新しいkittyを開けば準備完了です。 開いたkittyで次のコマンドを実行してみて下さい。


$ kitty @ set-font-size 24


kittyで始まっていますが、新しいkittyが開くわけではなく、 今あるターミナルのフォントの大きさが変わったはずです。 kittyターミナルの中では、"kitty @"で始まって、 その後ろにkittyを操作するコマンドを書くことで、 今あるkittyを操作することが出来ます。 ここでは「set-font-size 24」というコマンドで kittyのフォントサイズを24を変更するように操作しました。 set-font-sizeには、引数0を渡せばデフォルトのフォントサイズに戻せます。


では、フォントサイズをもとに戻して、 それから、以下のような入力をしてみましょう。


$ kitty @ set-font-size 0
$ kitty @ --help


これが"kitty @"の後に渡すことが出来るkittyコマンドの一覧です。 また、"kitty @"だけを実行すると、kittyコマンド自体を実行できる、 専用のシェルが開きます (デフォルトでショートカットキーに割り当てられているCtrl+Shift+Escと同じ)。 専用のシェルでは、"kitty @"を付けることなく、kittyのコマンドだけで、kittyを操作することが出来ます。


テーマをリアルタイムに変更する

ここで、このkittyを操作できる機能を使って、 kittyのテーマをリアルタイムに変更する方法を紹介します。 これは、https://paul-nameless.com/mastering-kitty.htmlのページで紹介さてていました。 fzfを利用して、その選択結果をfzfのプレビュー機能で、kittyコマンドに与えてリアルタイムでkittyの配色を変更しています。


まずは、fzfがない場合インストールしておきます。 archlinuxでは、公式リポジトリにあるので、次のコマンドでOKです。


$ sudo pacman -Syu fzf


次に、上記で紹介した様にkittyのテーマファイル集を入手して、 適当なディレクトリに入れておきます。 上記の例のgithubからgit cloneした場合には、 "~/.config/kitty/kitty-themes/themes/"にテーマファイルが入っています。


最後はスクリプトファイルです。 元ページでは、ワンライナのコマンドを紹介して、それをエイリアスしておきましょうと勧めています。(fzf使いなら日常的なのかもしれませんが、僕は初めてなので暗号チックなのは苦手) もちろん慣れている人は、コマンドのエイリアスでもシェル関数でもなんでもOKですが、 ここでは、見通しが良いようにスクリプトにしてあります。 以下のスクリプトを作成して、実行権限を与え、pathの通った場所に置きます。 スクリプトの中のtheme_dir変数には、 各自でテーマファイルが置いてあるディレクトリを当てて下さい。





また、kitty.confに以下の一行が必要になります。 (デフォルトのkitty.confではコメント化されています。)


listen_on unix:/tmp/kitty


スクリプトファイルを実行すると、テーマファイルの一覧が出てくるので、 カーソルキーで上下に動かして変更してみて下さい。 エンターを押すと、そのテーマに決定されます。



配色を見比べる時は、kittyを分割して、 コードや配色が見れるものを別ウィンドウに開いておき、 それから、テーマを実際に変更すると良いと思います。 上記のデモではneofetchという定番アプリで、 配色を確認しています。


0 件のコメント:

コメントを投稿

Bottom Ad [Post Page]