search
LoginSignup
5

More than 5 years have passed since last update.

posted at

updated at

一風変わった補完候補の色付け方

一風変わった補完候補の色付け方が /r/zsh にポストされているんですけれども、

http://www.reddit.com/r/zsh/comments/msps0/color_partial_tab_completions_in_zsh/c367xqo
(nicoulaj さんによる)

これを $LS_COLORSできるだけ 反映するようにしてみました。
結果はこんな感じです。(http://www.youtube.com/watch?v=DK6BTjFQKuU)

list-corols.zsh

ソースコードはこちらから (https://github.com/hchbaw/list-colors.zsh)

インストール方法

% git clone https://github.com/hchbaw/list-colors.zsh.git
% cd list-colors.zsh
% $SHELL -uc ". ./list-colors.zsh && list-colors-zcompile ~/.dir_colors ~/.zsh/"
** Dumping and zcompiling for ~/.dir_colors
re-compiling ~/.zsh/list-colors-init.zwc: succeeded
** All done.
** Please update your .zshrc like this:
-- >8 --
fpath+=~/.zsh
autoload -Uz list-colors-init; list-colors-init
zstyle -e ':completion:*:default' list-colors list-colors list-colors-aux
# zstyle ':completion:*' group-name ''
# If you want to make it to respect directory-type color setting, you need
# to uncomment above line, please.
-- 8< --

出力の最後の -- >8 -- から -- 8< --.zshrc へ追加して下さい。

list-colors-zcomplieについて

上で出てくるコマンドです。 dircolors(5) から zshlist-colors 用のパターンと、その時に動くコードをあらかじめ作るためのツールです。

使い方

list-colors-zcompile <dircolors(5)の設定ファイル> <出力するディレクトリ> <色設定ファイル>

対話環境で必要になる関数と変数をそれぞれの設定ファイルから <出力するディレクトリ> の下へ list-colors-init というファイルに autoload できる形で変換します。
dircolors の設定値を <色設定ファイル> でマップしているんだけれどもとってもいい加減です。
(一応手元では動いた〜、というレべルです…ごめんなさい)

注意点です

上で「できるだけ」って書いたことなんだけれども、ファイルの拡張子でなくってファイルタイプで色が指定されているものに関しては上手くできていないです。特に、強引にディレクトリだけを特別扱いしようとしているんだけれども、不完全です。
(cd する時と editor 等で、とあるディレクトリの下のファイルを開こうとする時、ディレクトリのはずなのに色が違う所です。自分ではディレクトリのはず!と思ったら途中でも '/' を入力しちゃうからか、ちょっとくらいおかしくても気にしなくなっちゃった…)

あと、補完関数の中で campset されていたりするときも不完全です。

う〜む、どうにかしたいんだけれども方法が思いつかない…ごめんなさい。

とりあえず、 list-colors-aux では半ば強引につじつまを合わせているので、必要であれば参考にしつつカスタマイズして下さい。それには、上の方で出てきた、

zstyle -e ':completion:*:default' list-colors list-colors list-colors-aux

の部分を、例えばそもそも my-list-colors 定義してそれを使うようにするには、

zstyle -e ':completion:*:default' list-colors my-list-colors

となります。 list-colors 関数を使いつつ、 my-list-colors-aux を新たに作って

zstyle -e ':completion:*:default' list-colors list-colors my-list-colors-aux

とするのもありかもしれません。
やっぱり長くなった。おつかれ様でした。

どうもありがとう、Julien Nicoulaud!

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
What you can do with signing up
5