Mon Feb 17 2020

urxvt に乗り換えたり色々した

2020年にもなってようやく家の Ubuntu 14.04LTS を 16.04LTS にアップグレードした. そしたらいくつか動かなくなったものが出てきたのでせっかくなので新しい環境に順応することにした. あとニヶ月したらまた新しい環境が来るんだけど.

IME

毎回なんだけど ubuntu のアップグレードのたびに IME は死ぬ気がする. ibus か fcitx かを毎回試したりする. 一旦全部消して, Ubuntuが提供する Unity デスクトップ環境にログインして行儀よくGUIの設定画面からポチポチするのが一番早い. 14.04 では fcitx を使ってたけど, 今は ibus が使われている. Mozc はいつも, 起動したては "Input Mode" が "Direct" になっていて, これを手で "Hiragana" にしないと普通の日本語入力に出来ないんだけど, これを勝手にやってくれる方法が未だ分からん.

Terminal

gnome-terminal とか terminator とか使ってて, 普通には全然使えるんだけど, w3m-img でターミナル上に画像を表示する機能が死んでしまった. ほとんどの人はそんな機能は興味ないかもだけど, 私はファイラーとして ranger を使ってるのでとても困る. 本当はちゃんと画像があれば画像のプレビューが右側に表示されるのが何も表示されなくなった. 今まではなんで動いてたのかよくわからないけど, しょうがないので ranger 公式がサポートを謳ってるターミナルの1つである urxvt を使うことにした. ranger だけ urxvt で他は違うターミナルで〜, というのもなんだか変なので, 本格的にこれに乗り換えることを考える.

何も考えずに

sudo apt install rxvt-unicode-256color
rxvt

で起動すると, ちっちゃい画面にカクカクの文字でプロンプトが表示されるだけで日本語も打てないで使い物にならない. 起動時のオプションでフォントやら色設定を渡すことができるが, 普通は ~/.Xresources に設定を列挙して使うらしい. また単体で起動することもできるけど, 一個デーモンを起動しておいてターミナルはこれにアタッチして起動する使い方が推奨されてるのかなんなのか分からんが, 省メモリで良いらしいので, 郷に従うことにする.

urxvtd -q -o -f  # start daemon
urxvtc  # attach a new terminal

urxvtc はアタッチして起動するコマンドで, デーモンが起動してない状態でこれをやると エラーコード 2 で異常終了するので, それを利用するとデーモンを無駄に起動しすぎないことができる. つまり,

urxvtc "$@"
if [ $? -eq 2 ]; then
  urxvtd -q -o -f
  urxvtc "$@"
fi

これを私は適当なスクリプトファイルにして保存してこれを起動コマンドにした.

さて, まだ何の設定もしてないと, フォントはカクカクだし色設定も目に痛いし, 日本語は打てないしクリップボードもタブも使えない. フォントと色設定とIMEの問題は初めからの設定でなんとかなる. クリップボードとタブについては Perl によるプラグイン拡張で対応する.

そう, このターミナルは Perl で拡張するスタイルのようで, ~/.urxvt/ext/ の下に Perl スクリプト(拡張子なし)で保存するとそれを設定できるようになる. タブに関しては tabbed という名前のプラグインが標準で入っている. クリップボードについては, Arch Wiki だと clipboard という名前で標準に入ってるように書いてあるが, 私の環境だと入ってなかった. github.com/muennich/urxvt-perlsdeprecated/ 以下にそれがあるので, スクリプトファイルだけをさっき述べたディレクトリに置けば設定出来るようになる.

というわけで現時点の設定ファイルを以下に載せる. と言ってもこれはインターネット上に散らばっていた色んな設定ファイルを私なりにマージしただけのものです.

!! ~/.Xresources

Xcursor.theme: ycursors
Xcursor.size: 64

!!
!! rxvt-unicode (urxvt)
!!

URxvt.geometry:             96x32
URxvt.scrollBar_right:      true
URxvt.scrollBar_floating:   true
URxvt.scrollstyle:          plain
URxvt.cursorBlink:          true
URxvt.cursorUnderline:      true
URxvt.pointerBlank:         true
URxvt.visualBell:           true
URxvt.saveLines:            3000
URxvt.fading:               40

!! 使うプラグインの列挙
URxvt.perl-ext-common: clipboard,url-select,keyboard-select,tabbed

!! clipboard
URxvt.clipboard.autocopy: true
URxvt.copyCommand: xclip -i -selection clipboard
URxvt.pasteCommand: xclip -o -selection clipboard
URxvt.keysym.M-c: perl:clipboard:copy
URxvt.keysym.M-v: perl:clipboard:paste
URxvt.keysym.M-C-v: perl:clipboard:paste_escaped
URxvt.keysym.M-Escape: perl:keyboard-select:activate
URxvt.keysym.M-s: perl:keyboard-select:search
URxvt.keysym.M-u: perl:url-select:select_next
URxvt.urlLauncher: firefox
URxvt.underlineURLs: true
URxvt.urlButton: 1

!! tabbed
URxvt.tabbed.tabbar-fg: 2
URxvt.tabbed.tabbar-bg: 0
URxvt.tabbed.tab-fg: 3
URxvt.tabbed.tab-bg: 0

!! IME
URxvt.inputMethod: ibus
URxvt.preeditType: OverTheSpot
!! ibus-daemon の起動コマンドに --xim を付け加える必要あり

!! Font list and Spacing
URxvt.font:                 xft:Dejavu Sans Mono-15,\
                            xft:IPAGothic
URxvt.letterSpace:          -1
!URxvt.lineSpace:            0

!! Color Scheme and Opacity - gruvbox-dark https://github.com/morhetz/gruvbox
URxvt.depth:                32
URxvt.color0:               [90]#282828
URxvt.color1:               [90]#cc241d
URxvt.color2:               [90]#98971a
URxvt.color3:               [90]#d79921
URxvt.color4:               [90]#458588
URxvt.color5:               [90]#b16286
URxvt.color6:               [90]#689d6a
URxvt.color7:               [90]#a89984
URxvt.color8:               [90]#928374
URxvt.color9:               [90]#fb4934
URxvt.color10:              [90]#b8bb26
URxvt.color11:              [90]#fabd2f
URxvt.color12:              [90]#83a598
URxvt.color13:              [90]#d3869b
URxvt.color14:              [90]#8ec07c
URxvt.color15:              [90]#ebdbb2
URxvt.foreground:           [90]#ebdbb2
URxvt.background:           [90]#282828
URxvt.colorIT:              [90]#8ec07c
URxvt.colorBD:              [90]#d5c4a1
URxvt.colorUL:              [90]#83a598
URxvt.scrollColor:          [90]#504945
!URxvt.troughColor:          [90]#3C3836

さて今も urxvt でブログを書いているが, IME 周りはなんだか不安定だ. 「な」を打つために "na" と打ったのに "n" の時点で一度勝手に確定がはいって「nあ」となるような現象がしばしばあった. 一度ウィンドウのフォーカスを他に移してからまた戻すと治る, ということがわかった. しかし誰が悪いのか分かってない.

追記 - ranger の image preview

現時点で ranger の 1.9.0b5 を使っている. ~/.config/ranger/rc.confset preview_images true としてさえいればプレビュー機能は有効になり, urxvt で実際にプレビューは見れる. のだが, 崩れる. カーソルのある行から崩れる. 念の為に set preview_images_method urxvt を設定に付け加えると, これは完全に解消された. ついでに, プレビューしてるときだけターミナル全体が透過されるようになったのだが, これは意図した挙動なのか? 見ようによってはおしゃれなので, まあいっか.