rcmdnk's blog

20170724_colorls0_200_200

コマンドラインで頻繁に使うコマンドの1つlsですが、 colorlsというコマンドを使うと lsの結果にファイルの種類に応じてアイコンマークを着ける事が出来ます。

colorlsをインストール

colorlsはRuby製のコマンドラインツールでgemを使って

$ gem install colorls

とする事でインストールできます。 gemのディレクトリに正しくPATHが通っていればこれでcolorlsコマンドが使える様になります。

加えて表示するアイコンをインストールする必要があります。

今回はnerd-fontsを入れました。

Mac+Homebrewなら

$ brew cask install caskroom/fonts/font-hack-nerd-font

で入ります。 LinuxやMacでも直接入れる場合はインストールスクリプトを使ってインストールする事も出来ます。 curlを使って直接持ってくる事もできて

Linux:

$ mkdir -p ~/.local/share/fonts
$ cd ~/.local/share/fonts
$ curl -fLo "Droid Sans Mono for Powerline Nerd Font Complete.otf" https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/patched-fonts/DroidSansMono/complete/Droid%20Sans%20Mono%20for%20Powerline%20Nerd%20Font%20Complete.otf

Mac:

$ cd ~/Library/Fonts
$ curl -fLo "Droid Sans Mono for Powerline Nerd Font Complete.otf" https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/patched-fonts/DroidSansMono/complete/Droid%20Sans%20Mono%20for%20Powerline%20Nerd%20Font%20Complete.otf

な感じでインストールします。

後はこのフォントを使える様にターミナルの設定が必要な場合があります。

MacでiTerm2を使っている場合、 Preferences Profiles で使っているプロファイルを選びTextのタブに行くと一番下にUse a different font for non-ASCII textという項目があると思います。

これにチェックを入れるとNon-ASCII FontというASCII以外の文字に関するフォントを選ぶ項目が現れるので ここで先ほどインストールしたKnack Nerd Fontを選択します。

iterm2 preferences

ターミナル.appだと全体のフォントだけが選べるのでそこでKnack Nerd Fontsを選ぶ事も出来ますが iTerm2だときちんと分けて選択出来るので通常のフォントをきちんと選びたい時にはやはりiTerm2が便利。

実際の表示

実際に表示してみた結果はこんな感じ。

colorls

lsと同様に-a.から始まるファイルも表示されます。

-rを付けるとフォルダの数などのちょっとしたレポートが追記されます。

colorls -r

また、-lオプションを付けるとlsの様にパーミッションや所有者の情報等 を表示する事が出来ます。

colorls -l

初期設定だと暗いバックグラウンドな環境では

  • アイコンのあるファイル: 緑
  • アイコンのないファイル: 黄色
  • ディレクトリ(アイコン有無関係なく): 青

と言った表示色になっています。

設定ファイル

アイコンはファイルの拡張子、またはディレクトリの場合はディレクトリの名前自体を見て 付けている様ですが、 この関連付けは$(dirname $(gem which colorls))/yamlにあるYAMLファイルで定義されています。

colorls/lib/yaml at master · athityakumar/colorls

files.yaml

...
py:           "\ue606"
r:            "\uf25d"
rb:           "\ue21e"
...

というのがあって左が拡張子で右がフォントの文字コード。 file_aliases.yamlには

...
gemfile:          rb
gemspec:          rb
guardfile:        rb
...

と言った羅列があって左が拡張子、右がfiles.yamlで定義されている拡張子で その設定を同じく使う様にエイリアス定義を行っています。

folders.yamlにはディレクトリ名と文字コード、 folder_aliases.yamlにはディレクトリのエイリアスが定義されています。

これらのファイルに拡張子や文字コードの設定を加えれば 新たなファイルタイプにしたり表示アイコンを変更したりも出来ます。

デフォルトだと.cppはアイコンがあてられてますが .cxxとか.hとかは割当がないので.cppのエイリアスにしたり。

残りのdark_colors.yamllight_colors.yamlは表示の色を定義するファイルです。

dark_colors.yamlでは

# Main Colors
unrecognized_file: yellow
recognized_file:   green
dir:               blue

こんな設定になってますが、

# Main Colors
unrecognized_file: white
recognized_file:   white
dir:               yellow

みたいな設定が良いかな、と個人的には。

colorls config

アイコンの有無で色を変えるのはあまり意味が無いので適当な色に統一。 青は黒バックグラウンドだとちょっと見えにくいので黄色とか他の色にした方が見やすいです。

現在の所、lsの様にシンボリックリンクや実行可能ファイル、と言った定義で 色を変更することは出来ない様です。

シンボリックリンクに関しては-lを使えば上にある様に リンクの有無も確認してくれてDead Linkの表記もしてくれます。

ただしこの場合元ファイルの表記がないのがちょっとわかりにくい所。

エイリアスについて

ちなみにcolorlsのREADMEには

$ alias lc=`colorls -l`

というエイリアス設定が載ってますが、 手元のMacだと Monoという.NET frameworkの 中のコマンドが既にありました。

$ type lc
lc is hashed (/Library/Frameworks/Mono.framework/Versions/Current/Commands/lc)

Caskでmono-mdkというパッケージをインストールしたっぽいんですが なんで入れたのか忘れました。

多分問題ないと思いますが何かしら影響があるかもしれないのでlcをエイリアスする時にはちょっと注意。

load_from_yaml': undefined method safe_load’ for Psych:Module (NoMethodError)

Homebrewにはgemパッケージも管理できるbrew-gemという拡張機能があります。

最初、colorlsをこのbrew-gemを使ってインストールしてみた所 以下の様なエラーが出ました。

/usr/local/Cellar/gem-colorls/0.1.7/gems/colorls-0.1.7/lib/colorls/load_from_yaml.rb:4:in `load_from_yaml': undefined method `safe_load' for Psych:Module (NoMethodError)
        from /usr/local/Cellar/gem-colorls/0.1.7/gems/colorls-0.1.7/lib/colorls/flags.rb:52:in `set_color_opts'
        from /usr/local/Cellar/gem-colorls/0.1.7/gems/colorls-0.1.7/lib/colorls/flags.rb:5:in `initialize'
        from /usr/local/Cellar/gem-colorls/0.1.7/gems/colorls-0.1.7/exe/colorls:4:in `new'
        from /usr/local/Cellar/gem-colorls/0.1.7/gems/colorls-0.1.7/exe/colorls:4:in `<top (required)>'
        from /usr/local/bin/colorls:5:in `load'
        from /usr/local/bin/colorls:5:in `<main>'

colorlsのIssueに

load_from_yaml': undefined method safe_load’ for Psych:Module · Issue #85 · athityakumar/colorls

と丁度同じエラーのものがありましたが、これに従ってgem updateを行ってみても上手く行きません。

試しに直接gem install colorlsをしてみた所上手く行きました。

brew-gemでインストールすると、通常のgemコマンドのときと別の所にインストールされるのですが、 この際にパッケージの依存関係とかは無視してそれだけを入れる様な状態になるみたいです。 なのでbrew-gemは依存関係が無いようなよほど孤立したものか もしくは自分で全部確実に依存関係すべてを書ける様な場合にしか使えないです。

上記のIssueでは/Library/Ruby/Gems…というディレクトリなのでbrew-gemでインストールしたものではないと思いますが、 恐らく複数のgemの管理環境があったりしてパッケージの依存関係がおかしくなってしまっている様な状態だと思います。

まとめ

lsコマンドは頻繁に使うコマンドなので それを飾り付け出来るのはなかなか楽しい所だと思います。

ただし、lsの拡張と言うよりは アイコンを付けて表示するための別コマンド、という感じがあるので 実用的にはlsを置き換えるというにはまだ難しい感じです。

まあ上に上げた様なことは現在出来ることを見ると 簡単に実装できそうなきもするので そのうち置き換える様に出来るかもしれません。

後は今のところgemの中にある設定ファイルを直接いじる様になってますが HOMEディレクトリとかの個人ファイルを読み込める様にならないとなかなか使い勝手が良くないです。

ただ見た目は結構面白いので人にちょっと見せつけてみるとか。

Sponsored Links
Sponsored Links

« 半額でEvernoteをプレミアムアップグレード MacでFinderの小さな表示が残ってしまう問題 »

}