ねこが居る会社でkittyを使う

プログラミングスクール時代からなんとなく[iTerm2](https://iterm2.com/)を使っていたが
ねこが居る会社に入社して3年、アイコンにねこが居る[kitty](https://sw.kovidgoyal.net/kitty/)というターミナルを使ってみた

kittyの設定はkitty.confを編集することでカスタマイズができる
僕が設定した項目と便利だと思った項目をまとめてみた

# kitty設定ファイル
kittyのターミナル上で`cmd + ,`を押すとkitty.confを開くことができる
編集した場合は`cmd + ctrl + ,`でkitty.confをリロードする

```
# フォントの指定
font_family FiraCode Nerd Font Mono

# タブのデザイン
tab_bar_style powerline

active_tab_foreground   #000
active_tab_background   #ffc2e0
active_tab_font_style   bold-italic
inactive_tab_foreground #444
inactive_tab_background #fee0e0
inactive_tab_font_style normal
tab_bar_background      #fef4f4

# ターミナル背景画像
background_image ~/Downloads/IMG_2127.png
background_image_layout tiled
background_tint 0.6

# ウィンドウの移動 拡張機能必須 ※この記事に詳細あり
map kitty_mod+j kitten pass_keys.py neighboring_window bottom ctrl+j
map kitty_mod+k kitten pass_keys.py neighboring_window top    ctrl+k
map kitty_mod+h kitten pass_keys.py neighboring_window left   ctrl+h
map kitty_mod+l kitten pass_keys.py neighboring_window right  ctrl+l

# 次のタブへ移動
map kitty_mod+n next_tab

# 前のタブへ移動
map kitty_mod+p previous_tab

# ウィンドウのレイアウト変更
map kitty_mod+space next_layout

# ウィンドウ同時入力 拡張機能必須 ※この記事に詳細あり
map kitty_mod+a launch --allow-remote-control kitty +kitten broadcast --match-tab state:focused

# 1行ごとのスクロール
map kitty_mod+cmd+y scroll_line_up
map kitty_mod+cmd+e scroll_line_down

# ページごとのスクロール
map kitty_mod+cmd+k scroll_page_up
map kitty_mod+cmd+j scroll_page_down
```

# フォント
kittyは使えるフォントが限られているらしい
設定できるフォントはコマンドを叩くと確認ができる
```
kitty + list-fonts --psnames
```
僕は以前から使っていたフォント（FiraCode Nerd Font Mono)は問題なく使えた
kitty.confにfont_familyを編集すると好きなフォントが使える
```
font_family FiraCode Nerd Font Mono
```
kittyでFiraCode Nerd Fontを使うと矢印や比較演算子の表示が変わったのに驚いた！
![スクリーンショット 2022-12-06 10.48.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566444/a05550be-915c-792a-34b0-b4341f31ed83.png)

https://github.com/kovidgoyal/kitty/issues/179

# 背景画像
`background_image`でファイルパスを指定することで簡単にターミナルの背景画像を設定できる
画像はPNG形式でないとダメらしい

背景画像に設定する画像のコントラストが明るい場合は文字が見えにくくなることがある
その場合は`background_tint`の値を調整すると背景が暗くなり文字が読みやすくなる
### background_tint 0.0
![スクリーンショット 2022-12-07 11.20.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566444/db942301-de3a-cdc6-4adf-cc664ae63aa8.png)
### background_tint 0.6
![スクリーンショット 2022-12-07 11.20.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566444/830a71bb-56ef-3451-62ee-53a0dc4be932.png)
```
# 画像ファイルのパスを指定
background_image ~/Downloads/IMG_2127.png
background_image_layout tiled
# 背景画像の色合いを調整
background_tint 0.6
```

# ショートカットキー
ターミナル操作をキーボードから快適に操作するためにショートカットキーをカスタムした
vimを使っているのでvimと似た操作感かつターミナル操作に干渉しないように設定してみた
## プレフィックス
kittyではプレフィックのようなものを設定できる
iTerm2の時はプレフィックスを`Commandキー`にしていたので最初は同じ設定にしよとしていたが
Macのグローバルショートカットと被ってしまい、予期しない動作をしてします、、
その為、プレフィックスはデフォルトのまま使うことにした
```
# デフォルト設定
kitty_mod ctrl+shift
```
## ウィンドウ操作
### ウィンドウ分割
`kitty_mod + Enter(デフォルト)`または`cmd + Enter(デフォルト)`
ショートカットキーを入力するごとにウィンドウが分割される
ウィンドウを閉じたい時は`kitty_mod + w(デフォルト)`で閉じることができる
![ウィンドウ操作.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566444/16d1f2cd-df82-4f8c-2648-f941e24a92e6.gif)

### ウィンドウレイアウト変更
分割したウィンドウのレイアウトを変更したい時は`kitty_mod + space`を入力すると切り替えられる
```
#: ウィンドウのレイアウト変更
map kitty_mod+space next_layout
```
![ウィンドウレイアウト変更.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566444/b51ff3d6-ec7f-cd6d-b718-72ebe095add8.gif)

### ウィンドウの移動
vim分割ウィンドウ移動と同じく `h, j, k, l`で移動したいので[拡張機能](https://github.com/knubie/vim-kitty-navigator)を導入した
neovimoプラグインマネージャーはpackerを使っているので記述を追加したが、なぜかインストールできていなかった、、
その為、GitHubの`pass_keys.py`を`~/.config/kitty/`に手動でコピーしてくることで解決した

README.mdのサンプルの`ctrl + *`だとターミナル操作中のbackspaceとdeleteに干渉してしまうので`kitty_mod + *`に変更した
```
# ウィンドウの移動
map kitty_mod+j kitten pass_keys.py neighboring_window bottom ctrl+j
map kitty_mod+k kitten pass_keys.py neighboring_window top    ctrl+k
map kitty_mod+h kitten pass_keys.py neighboring_window left   ctrl+h
map kitty_mod+l kitten pass_keys.py neighboring_window right  ctrl+l
```
![ウィンドウ移動.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566444/849936f9-f351-5b99-672d-1b3e369a9d1a.gif)

## タブ切り替え
開いているタブを移動する際のコマンドも自分が使いやすいキーに変えている
```
# 次のタブへ移動
map kitty_mod+n next_tab

# 前のタブへ移動
map kitty_mod+p previous_tab
```
![タブ移動.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566444/6d83e943-a10c-40d4-c29a-ed4843f071a2.gif)

# 画像表示
kittyはターミナル上で画像を表示できる
コマンドを毎回入力するのは大変なのでエイリアスを設定することを推奨されている
![スクリーンショット 2022-12-11 16.45.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566444/c34c6a73-7126-21c4-092d-a9afc2513150.png)

```
kitty +kitten icat image.jpeg

# sellにエイリアスを設定すると便利
alias icat="kitty +kitten icat"
```
https://sw.kovidgoyal.net/kitty/kittens/icat/#icat

# ウィンドウ同時操作
iTerm2では普段はtmuxを使っているがkittyはtmuxを推奨していないらしい
tmuxでよく使う機能にターミナル分割時のウィンドウ同時操作がある
tittyでは[拡張機能](https://github.com/kovidgoyal/kitty/issues/1569)として準備されていたので使ってみた

kittyのリモコン機能を拡張しているのでウィンドウの1つが入力専用画面になってしまうので画面が狭いこと以外は問題なかった
## 注意点
拡張機能を使うにはkitty.confに記述を追加する必要があるが記述方法に注意しないと
開いているすべてのウィンドウが同期してしまう
その為、操作したくないターミナル画面でも入力したコマンドが実行されてしまうので注意が必要だ
```
# 現在居るタブのウィンドウのみを同時入力する場合のマッピング
map kitty_mod+a launch --allow-remote-control kitty +kitten broadcast --match-tab state:focused
```
![ウィンドウ同時操作.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566444/18e2e06a-40c6-6581-42dd-2aa606448473.gif)

# ssh
ssh接続してsudoコマンド、suコマンドを使うと
バックスペースが効かなくなったり、表示がおかしくなったり誤動作することがあった、、
原因は公式の[Q&A](https://sw.kovidgoyal.net/kitty/faq/#keys-such-as-arrow-keys-backspace-delete-home-end-etc-do-not-work-when-using-su-or-sudo)に理由が書いてある
`kitty +kitten ssh`コマンドを使うことで解消されるらしいが、例外もあるようで僕の環境では例外に当てはまった
解決策に少し抵抗を感じたので`ぶていさん`という方の記事を参考にエイリアスを張ることにした
kitty以外のターミナルを使った際にコマンドが被るのが嫌だったので`kssh`とした

```
alias kssh="TERM=xterm /usr/bin/ssh"
```
参考
https://tech.buty4649.net/entry/2022/01/21/191732

# アイコン画像を変更
MacのDockに表示されるアイコンを変更できるらしい
公式のQ&Aに`kittyのアイコンが好きではない`という項目があり、アイコンの変更方法といくつかサンプルも用意されていた
直接アイコンファイルを置き換える方法などいくつかあるみたいなので今回は
表示したいアイコンのパスを渡してアイコン画像を変更してみた

```
kitty +runpy 'from kitty.fast_data_types import cocoa_set_app_icon; import sys; cocoa_set_app_icon(*sys.argv[1:]); print("OK")' {表示させたい画像のパス} /Applications/kitty.app
```
設定に成功してもMacのキャッシュが残ってしまって正しく表示されないのでキャッシュを削除する必要がある
```
rm /var/folders/*/*/*/com.apple.dock.iconcache; killall Dock
```
![スクリーンショット 2022-12-10 15.29.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566444/97f69aab-928c-b200-6190-f5cb6e52675f.png)

https://sw.kovidgoyal.net/kitty/faq/#how-can-i-assign-a-single-global-shortcut-to-bring-up-the-kitty-terminal

# 問題点
kittyに切り替えて僕が感じた問題点はいくつかあった
## 日本語入力
ターミナルでの日本語表示、日本語入力自体は今の所問題ないが
vimでコメントアウト時に日本語入力するとバグって入力されることがある、、
こまめにEnterで入力を確定したり、一度ノーマルモードに抜けて入力し直せば再入力できるようになるが
若干のストレスは感じる、、今後改善されると嬉しい
## tmuxのようにデーモン実行できない
個人的な問題ですが複数の案件で作業している時に、案件ごとにターミナルのタブなどの状態をセッションを保持しておける
tmuxを使っていたので、kittyの機能としては見当たらなかった、、
同じ悩みを抱えている人もいるようなので探せば解決策が見つかるかもしれない、、

https://sw.kovidgoyal.net/kitty/faq/#i-am-using-tmux-and-have-a-problem