2012-04-18

sudo.vim があるときの zsh 補完関数

先日、
てなことを思ったのですが、ついでなので補完関数書いてみよう、ということで書いてみました:
function _vimsudo {
  local LAST="${words[$#words[*]]}"
  case "${LAST}" in
    sudo:*)
      local BASEDIR="${LAST##sudo:}"
      BASEDIR="${~BASEDIR}"
      [ -d "${BASEDIR}" ] && BASEDIR="${BASEDIR%%/}/"
      compadd -P 'sudo:' -f $(print ${BASEDIR}*) \
      && return 0
      ;;
    *)
      _vim && return 0
      ;;
    esac

  return 1
}
ファイル名にワイルドカードを含めたとき(sudo:/etc/*conf とか)は上手く動きません。うーん
  • 2012-04-27:色々とミスっていたので修正。そもそも sudo: で始まるときだけやればいいのでした
  • 2012-04-30:ご指摘のとおり esac が抜けていました。
  • 2012-08-29:実は find いらないんですよね

2012-04-16

Being Gone

新年度早々からこんな陰気な曲を書くあたり先が思いやられる…と思ったらいままでも陰気な曲しか書いてないので問題ないでしょう(ぇ。 ハ短調で書き始めたのですがあまりに陰気くさいので移調して、出だしはニ短調です。ホ長調のつなぎのフレーズの(憂鬱なニ短調のテーマに対して、)雲が晴れる感じと最後のフレーズが気に入っています。
私は、見頃の桜を見ても綺麗だとか何とか思う前に、諸行無常だとか、散華だとか、儚さだとか、変化だとか、そういった言葉を連想する程度には中二病…もとい仏教的思想の人間だったりします。
12 日、校庭の桜が綺麗に咲いていました。正直なところ、むしろ変化の感じられる葉桜ぎみの頃のほうが好きなのですが、ともかくこれはその日に書き始めた曲です。曲名はいつもどおり管理の都合で、書き始めた日にあったことや思ったことをそのままつけているに過ぎないのですが、さすがに桜、そんな名前は unix システムコールの open とか read 並の特等席ですし、何か別の名前をつけたくなってとりあえず、落花としてみたところです。

2012-04-14

Gentoo の Portage Tree を Git のものに差し替え

ここの手順をそのままやるとあなたの Gentoo/Linux が Funtoo Linux になります。 Gentoo ユーザは git://github.com/funtoo/portage.git を使ってください。
研究室の PC は gentoo/linux なのですが、funtoo なら portage のバージョンが新しい(>= 2.2)ので git の portage tree が使えますし、標準で git tree を使わせています。そこで、git tree を使うように変えたのでそのメモというか覚書です。なんかまえ同じ事をしようとしてわけわからんことになって、おかしいなあと思っていたのですが多分ファイルのパーミッションか所有権がおかしかっただけかと思います。
# portage 2.2 以降をインストールします 
sudo emerge -1av --autounmask-write '=app-portage/portage-2.2.0_alpha100'
sudo dispatch-conf
sudo emerge -1av '=app-portage/portage-2.2.0_alpha100'
# /usr/portage.git に git tree を展開します
cd /usr
sudo mkdir portage.git
sudo chown portage:portage portage.git
sudo -u portage git clone https://github.com/funtoo/ports-2012.git portage.git
cd /usr/portage.git
sudo -u portage git checkout funtoo.org # これいらないかも? いらない
cd /usr
# tree を差し替えます
sudo mv portage portage.bak
sudo mv portage.git portage
emerge --sync で git が動くようになります。ばんざい。@world を emerge したほうがいいかもしれません。というより、funtoo の portage はばんばん更新されているので emerge -1 portage がおそらく必要です。
それと、funtoo の portage tree には boot-update とかの gentoo にはなかった便利ツールがいくつか入っていたり、いろんなカーネルが含まれていたりしますから、gentoo/linux ユーザなら funtoo の portage tree を使えば funtoo の恩恵が受けられていいんではないでしょうか。
以下蛇足

2012-04-11

Inkscape Extension を書くには

Extension の呼出し方がかなりシンプルになっているというか、ほとんど単なる外部プログラム呼出しなので簡単にできるようです。ようするに、
(interpreter)? your_script (--param=value)* /path/to/input[[/SVGfile]] | inkscape
というコマンドが発行されるのでコマンド引数を解析し、テンポラリファイルに出力された選択部分のオブジェクトの SVG データを変更して 標準出力に書きだせばよいということになります。もっとも、interpreter とか your_script とかいうのはプレースホルダでこいつは .inx ファイル(XML ファイル)の中で設定してやると必要なものに置き換えられます。
<?xml version="1.0" encoding="utf-8"?>  
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
  <_name>inkex</_name>  
  <id>com.example.inkex</id>  
  <effect>  
    <object-type>all</object-type>  
    <effects-menu>  
      <submenu _name="InkscapeExtension1"/>  
    </effects-menu>  
  </effect>  
  <script>  
    <command reldir="extensions" interpreter="mono">InkscapeExtension1.exe</command>  
  </script>  
</inkscape-extension>
  • command タグで起動コマンドを設定します。interpreter 属性がインタプリタ、タグの中身がインタプリタで実行するスクリプトファイルです。この例だと InkscapeExtension1.exe というアセンブリを mono で実行することになります。実行可能ファイルであれば interpreter の指定を省きます、いらないので。
    • reldir は(多分) $HOME/.config/inkscape/ の下のどこに起動するスクリプトがあるかということです。$HOME/.config/inkscape/extensions に .inx ファイルと一緒に置くと動きます。
  • _name タグは inkscape の extension メニューに表示される内容です。submenu を指定してるのでサブメニューで表示されますがこの例ではありがたみがありません。
  • object-type では extension を適用するオブジェクトの種類を指定します。all ですと全てですが、path にするとパスだけです。
    • 選択されたオブジェクトの id が --id=hoge の形式でコマンドラインオプションに追加されます。複数オブジェクトが指定されている場合はもちろん複数あります。