CLIでブックマークするgookmark


あ~このディレクトリをブックマークしたい

僕はwindowsでもlinuxでもコンソールを使うことが多く、
社内の共有ファイルサーバーとかにもコンソールで侵入していきます。
そんな時思うのが「あ~このディレクトリをブックマークしたい

Go言語で作ってみた

nocd5/gookmark
ざっくりと使い方は

$ pwd
 -> /foo/bar/hoge/moge
$ gookmark add
$ gookmark add ../..
$ gookmark list
 -> /foo/bar
    /foo/bar/hoge/moge

addしたものをlistで標準出力に表示するだけです。
front endはpecoあたりで書いた方がいいな。と思ったのでこうなりました。
どうせディレクトリ移動するにはシェルスクリプト書く必要がありますからね。

nyagos用にpecoを使ったfront end

pgm.lua
--------------------------------------------------------
-- gookmark Front End
function nocd5_pgm(args)
  local target = nyagos.eval('gookmark list | peco')
  if target ~= nil then
    if is_dir(target) then
      nyagos.exec('cd "' .. chomp(target) .. '"')
    else
      nyagos.exec('open ' .. target)
    end
  end
end
-- 
function is_dir(f)
  return nyagos.eval('file ' .. f):find(': directory')
end
function chomp(src)
  return string.gsub(src, "[\r\n]+$", "")
end
--------------------------------------------------------
alias{ pgm=nocd5_pgm }

選択したものがディレクトリならcd
ディレクトリ以外ならとりあえずopen(関連付けで開く)しています。

csh, bash

Githubのリポジトリにcshとbash用のサンプルスクリプトも追加しました。
nocd5/gookmark/examples
参考になれば幸いです。

おわりに

なぜGo言語になったか

最初に浮かんだのが、
bookmark add bookmark list bookmark remove
こんなサブコマンドを持つコマンドでした。
windowsでは主にnyagosを使ってるのでluaで書くことも考えたのですが、
それだとlinuxで使えないし、サブコマンド持つスクリプト書くのは面倒くさそう。
「そうだ!cli-initを使おう!」
ということでGo言語になりました。

ほとんどGo言語は書いたことがないので大変でした

まぁ規模が小さいので、大したことではなくて
自分で書いた関数から返すerrorどうするかなぁとか
errorがあった時、paniclog.Fatalとか、どれ使うんだろう?とか
(結局すべてfmt.Fprintln(os.Stderr, err)にしましたが)
しょうもないことですが。