2009年4月25日土曜日

Firefoxセッティング

ブックマークの移行

Firefox3系のブックマークはbookmarks.htmlではなくplaces.sqliteになっている(DB化され高速化を図った模様)。
F8 → F9時がちょうど FF2 → FF3の移行期だったので前回Fedoraアップグレード時は少しハマったけど、今回も忘れていた…

いつものようにF9領域をマウントしてコピーする。
$ sudo mount /dev/sda3 /mnt/
$ cp /mnt/home/okap/.mozilla/firefox/xxx.default/places.sqlite ~/.mozilla/firefox/yyy.default/
$ sudo umount /mnt


about:config

・Googleバーからの検索結果を新しいTabで開く
    browser.search.openintab: false → true
通常はそのページで検索結果が開かれてしまい、Alt+Enterとすると検索結果を新しいTabで開いてくれるが、いちいち面倒なので設定する。この設定をすると今度は逆にAlt+Enterでは現在のTabに検索結果が表示さるようになる。

ここで設定したマウスだと両サイドボタンが「進む/戻る」に、第2ホイールがGnomeアプリと同様横スクロールになっている。(FF2系だと第2ホイールのイベントが無視されてしまうので、FF3は速度以外にもいろいろ使い易く進化している)

しかし、FirefoxがFirebirdやPhoenixと呼ばれたM$ OS版が無かった頃のUIはNetscape Navigatorライクな操作性で良かった。(初めて使ったWebブラウザはネスケ。当時のUNIXやLinuxのデフォルト的存在だった)
例えば、Alt+スクロールで「進む/戻る」、Shift+スクロールで「1ページ分スクロール」だったのに変わってしまったのだ!

なので、ネスケ・ライクな操作に戻す為次の設定を施す。
・Alt+スクロールで「進む/戻る」
    mousewheel.withaltkey.action: 0 → 2

・Shift+スクロールで「1ページ分スクロール」
    mousewheel.withshiftkey.action: 2 → 1
※ライブブックマークの長いエントリーでスクロールが必要な場合にも有効

with*key.actionの各値の動作は以下の通り。







0:無視(通常スクロール)?
1:その方向(縦なら縦、横なら横)へのスクロール量を1ページ分に
2:進む/戻る
3:フォントサイズの拡大/縮小

・同様に横スクロール時も、+Shiftで1ページ横にスクロールできるように
    mousewheel.horizscroll.withshiftkey.action: 0 → 1
HTMLソースのような横長なものをブラウズするのに重宝する。

Google Toolbar

GoogleバーはFirefoxのを使用する。
オプションは「検索」タブでは[ハイライト]、[検索]、[上へ]ボタンを有効にする。
「ツール」タブでは[翻訳]以外のチェックは全て外してしまう。

つまり、Google Toolbarで自分が必要なのは以下の機能。
・検索フレーズのハイライト(マーカー)ボタン
・検索フレーズのボタン化
・URLの一つ上のディレクトリに移動できるボタン
・マウス・オーバー翻訳


UI変更

メニューバー、ナビゲーションバー、ブックマークバー、Google Toolbarとメニューが4段になり縦に幅を取るので、不要なアイコンを取っ払いスッキリ(2段に)させる。
検索バーも広くなった(検索バーはCtrl-Jで移動できるFirefoxのを使用する)。

※「RSS」ってボタンはライブブックマークを集めたもので、RSSなニュースサイトのIndexを確認するのに便利


検索バーを日本語サイトに

Fedora付属のFFの検索バーは「ウェブ全体から検索」が使用されデフォルトでは「日本語のページを検索」になっていない。

デフォルトを退避して、F9で使用していたものをコピー。
$ sudo mv /usr/lib/firefox-3.0.9/searchplugins !#$.org
sudo mv /usr/lib/firefox-3.0.9/searchplugins /usr/lib/firefox-3.0.9/searchplugins.org
$ sudo mount /dev/sda3 /mnt/
$ sudo cp -a /mnt/usr/lib/firefox-3.0.9/searchplugins /usr/lib/firefox-3.0.9/
$ sudo umount /mnt
※これらファイルがない場合は本家から日本語版FFをDLし、展開したfirefox/searchpluginsを拝借すればよい

Google以外にもAmazonやWikipediaも日本語サイトからの検索が可能になる。
$ ls firefox/searchplugins/
amazon-jp.xml        oshiete-goo.xml   yahoo-jp-auctions.xml
creativecommons.xml  rakuten.xml       yahoo-jp.xml
google-jp.xml        wikipedia-ja.xml

2009年4月23日木曜日

Athlon X2 と Neo

Athlon X2

省電力タイプの3250eを搭載したベアボーンMINIX-1000が明日出るみたい。サイズはB5に近い感じかな。
15WのAthlon Neoはシングルコアなのでこれもありかとも思っている。
このベアボーンはCPU付きなので、メモリとHDDで+1万円弱で組めることになる。LFBも128MB搭載している模様。

これを買うと今のメインマシン(Athlon XP)より以下の性能アップが見込めるの。
CPU: 32bit Single Core → 64bit Dual Core
Memory: DDR 512MB → DDR2 4GB(予定)
HDD: IDE → SATA
Power: 省電力モデルなので22Wに!
Size: ベアボーンなので省スペースに!
(現メインマシンどんだけショボいねん。。)

しかしメインマシンにするにも、幾つか気になる点も。
1) 両サイドの4cm角の小さいファンがうるさくないか?
2) HDDは2.5インチベイしかないので、5400rpmとなりメインマシンとしてどうかな?
3) SO-DIMMってのが…

ん~微妙です。Phenom IIの省電力版がいつ出るかにも依るのでもう少し様子見かな。

Athlon Neo

以前書いたhp製のAthlon Neo搭載のノートPCが日本でも発売になるそうな。

12.1インチも1.7kgってことでモバイル型ではないけれどNetbookの上位モデル並の価格で買える。というか Athlon Neo 搭載のって現在では唯一なので貴重。

でも、M$-Office無しモデルがあるなら、M$-OS無しモデルもあって欲しい。。だって、-1万円とかなら魅力でしょ!
へんてこOSが強制的に付いてくるので今回はパスかな。(付いてこなけりゃ買ったのに。。)

なお、上位モデルには Athlon X2 や Turion X2 もあるようです。


2009年4月20日月曜日

Vimアドオン: grep.vim

前回前々回とmanpageview.vimを紹介したのでアドオン繋がりで今回はgrep.vim。

アドオンを一つだけ選ぶとすれば、このgrep.vimというくらい重宝しているアドオン。これさえあれば他はデフォルト機能だけでやっていけるというくらいの代物!

インストール

ここからDL。
DLしたgrep.vimを ~/.vim/plugin/ 以下に配置すれば完了。

検索対象ファイルに対して検索するには
:Grep search_phase search_file
再帰検索の場合は
:Rgrep search_phase search_path

結果がQuickfix(下10行が水平分割される)で表示され、目的の行で「Enter」を押せばその場所に跳べる(もちろんQuickfixリスト内もVim操作が可能なので、検索結果の最後に跳びたければ「G」でOK)。

しかし、これでは使い勝手がVimの内部コマンド(:grep)と検索結果がQuickfix以外さほど変わりない。
そう、Vimの基本ポリシー"カーソル下の単語に対して~"を満たしていないのだ。

キーマップ設定

そこでDLページの説明にもあるように、キーマップの設定を行う。
Vimでは当然既に通常キー及びそれらにShiftやCtrlを加えたキーバインドは埋まっている。なのでLinuxでは大して使用しないF3やF4を使うことにする。

~/.vimrcに以下を追加する。
nnoremap <silent> <F3> :Grep<CR>
nnoremap <silent> <F4> :Rgrep<CR>

すると、「F3」でカーソル下の単語(ここではsignal_names)が :Grepの第1引数に入り
Search for pattern: signal_names
Enter」でカレントDirの全ファイル(*)が第2引数に入る。
Search in files: *

これで、「F3」「Enter」「Enter」でカーソル下の単語をカレントDirの全ファイルから検索し、Quickfixリスト内に表示された結果から「Enter」で目的の場所へ跳べるようになる。


更に「C-W Enter」とすると水平分割で元のコードを残したまま目的の場所へ跳べる。



2009年4月19日日曜日

manpageviewの補足

前回のmanpageviewについての補足。

アンインストール方法

以前はVim7.2以上という制限があり(現在はVim7.0以上となっているが)、かつFedora9デフォルトのVim7.1.Xだったので、起動時にエラーが出て使えずアンインストールする必要があった。
しかし、アンインストーラがなく複数のファイルが散らばってインストールされるので、他のアドオンを使っている場合は、~/.vim/以下をバッサリと言う訳にはいかない。

そこで、アンインストール方法。
インストールした日時で判別する。その当日ならば以下でインストールされるファイル群を見つけられるので、xargsで受けて消せばよい。
$ find .vim/ -mtime 0 -type f
.vim/.VimballRecord
.vim/autoload/manpageview.vim
.vim/syntax/manphp.vim
.vim/syntax/info.vim
.vim/syntax/man.vim
.vim/syntax/mankey.vim
.vim/plugin/manpageviewPlugin.vim
.vim/doc/tags
.vim/doc/manpageview.txt

水平分割の割合

K」でコードを水平分割してmanを開けるようになったが、その際デフォルトではmanがほとんど占めてしまいコードが4行しか見えなくなってしまう。
好みの問題だと思うけど自分はもう少しコード部分を残してmanを見たいので、以下のように変更。
[autoload/manpageview.vim:394]
g:manpageview_winopen == "hsplit"
...
    3wincmd -
...
水平分割は horizontal split なので、"hsplit"の部分
    3wincmd -
       ↓
    9wincmd -
これで10行分のコードは表示されるようになる。

man中のmanからの戻り

man中から更に別のmanに跳んだ後、「C-o」や「C-^」で戻れない。
:lsすると前のmanが代替ファイル(#)に入っていないのが原因のようだけど回避策今のところ不明。まだまだ修行がたりましぇん。。



2009年4月15日水曜日

Vimアドオン: manpageview

前回紹介した「K」でカーソル下の単語のmanを引く方法ですが、ただmanコマンドを起動しているだけなので、いくつか不満があり(そりゃmanのページャがVimでないのでストレスが溜まるってもんです!)今回はそれらを補ってくれるアドオンを紹介しちゃいまっす。

不満点その1

C-w K」としても水平分割してmanを開いてくれず、コーディングしながらmanを見る場合、複雑な型だったりすると一度に覚えきれずmanとコードを行ったり来たりしなくてはならなくなる。
タグジャンプの場合なら「C-w C-]」とすれば水平分割して定義場所に跳んでくれるのに。

ちなみにEmacsではmanにしてもgdbにしても水平分割が基本みたい。ただし、Vimのように"K"一文字で開いてくれる訳ではなさそう。このポリシーの違いでVim派なだけであって、Emacsの方が優れているとかいないとかいう優劣を付ける気はさらさらない(まぁどちらも同等の機能を有しており、片方で出来ることはもう片方でも出来るはずなので)。
それに複数あることは選べる自由があるということで良い事である。GnomeとKDEとかもね。

→ このmanpageviewというアドオンを入れると、「K」とするだけで(デフォルトで)水平分割してmanを開いてくれるようになる!

不満点その2

デフォルトの「K」だと、単にmanコマンドに制御を移しているだけなのでmanのページャが起動される為、Vim操作が出来ない。Vim操作が出来ないとman内で「*」検索ができないし、man中の説明に出てくるコマンドや標準関数のmanを更に引きたい場合に「K」コマンドが使えない。

→ manpageviewでは、manのページャがVimになるので上記操作が可能になる!

不満点その3

上記に関連するがページャがVimでない為、必要なインクルード・ファイルを確認したとき、"#include~"を「yy」でコピれない!
散々Vimでマウスを使うのはNGと言ってきましたが、このアドオンを知るまでは自分もこの時ばかりは渋々マウスでコピペしてました(もちろん納得はいかずこのアドオンを見つけるに至った)。

→ manpageviewでは、以下でコピペできるようになる!
インクルード・ファイルの行にカーソルを持って行き
yy」でヤンク(コピー)
C-w C-w」でフォーカス・ウィンドウをコードの方に切り替えて
gg」でソースの先頭行に移動して
}」でインクルード・ブロックの最下行に移動して
P」で貼り付けて
d0」で前の空白を消去(インデントを揃える)

インストール

インストール方法はここよりmanpageview.vba.gzをDLして、そのページにもあるように
$ vim manpageview.vba.gz
   :so %
   :q
とする。

普通のアドオンは~/vim/plugin/に配置すれば良いだけだが、manpageviewはいろいろ突っ込む必要があり、インストーラとしてVimスクリプトを用意してくれているので、インストール方法が異なる。
$ tree ~/.vim/
.vim/
|-- autoload
|   `-- manpageview.vim
|-- doc
|   |-- manpageview.txt
|   `-- tags
|-- plugin
|   `-- manpageviewPlugin.vim
`-- syntax
    |-- info.vim
    |-- man.vim
    |-- mankey.vim
    `-- manphp.vim

4 directories, 8 files




2009年4月14日火曜日

Vim: 「K」 カーソル下のフレーズのmanを引く

またまたカーソル下の単語に対してシリーズ。今回はmanを引く方法。
スクリプトを読んでいるときコマンドやそのオプション、Cのコードを読んでいるとき標準関数の引数、を調べたくなった場合、またコーディング中では標準関数の使用するヘッダ・ファイルを知りたい場合などでmanを引くことが良くあると思う。
ここでも、別端末にコピペしてmanを引くなんて行為はVimでは御法度!

Vimの正しい使い方は、そのフレーズ上にカーソルを持って行き、「K」を押す。これだけ!!
すると、そのmanが開く。これだけでもコードリーディングに集中できるようになるでしょう!

コードに戻る場合は、単にmanを実行中なだけなのでman操作に従い「q」を押しmanを終了させ、その後「続けるにはENTERを押すかコマンドを入力してください」と表示されるので、Enterを押せば良い。


ちなみに、manで良くあるFAQとしてprintf(1)とprintf(3)の引き方だが、コマンドラインではセクション番号を指定しない場合小さい方が優先される。
$ man printf
とするとコマンド(セクション1)のprintfのmanが開く。
標準関数(セクション3)のprintfのmanを開くには次のようにセクション番号を指定する必要がある。
$ man 3 printf

Vimの場合も同様で、printf上で「K」を押すとprintf(1)のmanが表示されてしまう。そこでprintf(3)のmanを表示したい場合は、「3K」とセクション番号を頭に付ける。

この操作方法は、「10j」とすると「j」10回分を意味するのと同じように、数値を指定したい時のVim操作の基本に沿っていると言える。



2009年4月12日日曜日

ページャとしてのview

UNIX系コマンドは結果を標準出力に出力するのが一般的だ。その出力量が端末の画面範囲を越えた場合パイプ経由でページャを使用することが多いだろう。
そこで皆さんはページャに何をお使いだろうか? more?less?lv?私は当然viewです!
それには単にVimerだからという以外にちゃんとした理由がある。

moreやlessやlvはページャなのでデフォルトで標準入力からの入力に対応してるが、Vimでは「-」というオプション(これはtarのと同じ)と共に起動すれば可能。
$ ps ax | view -


で、なぜVimかだが、今まで(+これから)紹介してきた機能が使えるからだ!
more等他のページャとエディタであるVimが決定的に異なるのは、カーソルという概念があるか否かである。
Vimの特徴であるカーソル下の単語に対しての検索やファイル・オープンが使えると、マウスの出番は廻って来ずに済む。


「*」の場合

例えば、マルチプロセスなプログラムのシステムコールをトレースした場合、ここで紹介した*」検索を使えば、同じPIDを追いたい時に先頭のPID上で「*」を押せば素早く追える。
*」が単語を表す正規表現を含んでいたことを思い出せば、ディスクリプ番号のみの検索も容易である。
$ strace -fF multi_process 2>&1 | view -
straceの場合はカラー表示にもなる!

また、objdump等でアドレスを追っていく場合でも「g*」で簡単に追える。
$ objdump -d my_prog | view -
更に関数名からtagジャンプもできる!



「gf」の場合

極めつけは、grepとの連携!
grepでソースコードやスクリプト、設定ファイル等を検索する場合、検索結果をVimで受けることで幸せになれる。

前回紹介したように「gf」とすれば、カーソル下のファイルが開けるのであった。そしてgrep結果の先頭にはファイルパスが! そう、検索結果から該当ファイルにジャンプできるのだ。
$ grep -nr pthread_ * | view -
再帰検索でも相対パスで表示されるので問題なく開ける。

だだし、上記「gf」だとファイルはオープンできるが、grepが出力する行番号にまでは跳んでくれない。
そこで、「gf」の代わりに「gF」を使うと、今度はちゃんと該当行にまで跳んでくれるようになる!

なお、標準入力から「view -」で受け取りファイルにジャンプ後「Ctrl-O」で検索結果に戻ろうとしても空ファイルになってしまう。これを回避したい場合は「:set hidden」な状態にしておけばOK!

さらに、開いたファイルの上でタグジャンプ等の移動コマンドを多用する場合など移動履歴のスタックが増え最初の検索結果に戻るのが大変になりそうな時は「Ctrl-W gF」で新規タブとして開いてから跳んでいくとよい。



2009年4月10日金曜日

Vim: 「gf」 カーソル下のファイルをオープン

前回に引き続きカーソル下の単語がある場合のTips。カーソル下の単語がファイルパスのとき「gf」とするとそのファイルをオープンできる。これはスクリプトを読んでいる時に出てくるファイルパスやCのインクルード・ファイルを見たいときに便利。
なので、端末をもう一つ開いてマウスでコピペしてという使い方はVimの正しい使い方ではない!


スクリプト

例えば、~/.bash_profile を view すると ~/.bashrc を読み込んでいる箇所がある。スクリプトを読む側としてはこの ~/.bashrc で何をしているのか気になるところだ。そこで ~/.bashrc 上にカーソルを持って行き「gf」と押してみよう。すると ~/.bashrc を開いてジャンプしてくれる!
$ view .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/binexport PATH


ジャンプした先の ~/.bashrc 内では更に /etc/bashrc を読み込んでいる。なので更にそこにカーソルを持って行き「gf」を押すと見事 /etc/bashrc にまで跳んでくれるのでっす!

戻る場合は、「Ctrl-^」や「Ctrl-O」を使う。(厳密には「Ctrl-O」は前のファイルに戻るという訳ではなく、直前のカーソル位置に戻る。一方、「Ctrl-^」は直前のファイルに戻るので、連続して実行すると2つのファイルを行ったり来たりしてしまい最初に開いたファイルには戻れない)
よって、/etc/bashrc まで跳んだ場合は「Ctrl-O」を2度押せば元の ~/.bash_profile に戻って来れるでしょう。


タブで開く

上述のように「gf」として開いて行った場合、最初の方に開いていたファイルに戻る為には辿ったスタックを一つ一つ戻る必要があり面倒に思うことがある。
そこで、「Ctrl-W gf」とすると、開こうとするカーソル下のファイルをタブで開いてくれる。
タブ間の移動は「gt」もしくは「gT」で行い、閉じる場合は普段通りに「:q」とする。

でも、開いていたファイルの左側のタブに開くのが違和感あり。感覚的に新規タブって右側でしょ?


Cコード

Cのコードの場合、プリプロセスで#includeされるヘッダー・ファイルの確認時等に使用できる。
「<>」で囲まれた標準ライブラリ関数のヘッダー・ファイルや「""」で囲まれたローカルなヘッダー・ファイルを開き定義等を確認したい場合も、カーソル下に持って行き「gf」とすればよい。

ちなみにインクルード・ファイルの検索パス設定は以下で確認できる。
:set path?
   ↓
  path=.,/usr/include,,
デフォルトではカレントdirと標準インクルードパスが設定されている。

従って、gccの「-I」でインクルードdirを指定してコンパイルするプログラムの場合は、この"path"に追加すれば「gf」でオープン出来るようになる。
また、クロスコンパイルする場合も検索パスにそのコンパイラの標準インクルードパスを加えればよい。


まとめ

このように、Vimでは気になったファイルパス記述があった場合、新たな端末を開いてファイルパスをマウスでコピペして別途開くという一連の面倒な作業を軽減してくれる(一度きり操作だったら苦にはならないとは思うけど何度も繰り返してたら地獄でしょ)。
何せマウスを使う行為は一度キーボードから手を離なし再度ホーム・ポジションまで持って来なくてはならないので、どうしても遅くなってしまうものだから。。


2009年4月9日木曜日

Vim: 「*」/「#」 カーソル下のフレーズを検索

Vimの好きなところはいくつもある。個人的な見解だがVi系ってキーを打たずに済むポリシーのように感じる。キータイプが遅い自分としてはそこが一番気に入っている。
キーを打たないとは、カーソル下の単語に何かをするのである。
その何かとは、例えば検索だったり、ファイルパスだったり、manだったりする。

今回はその中で「検索」についてのTips(まぁVi系の基本操作の部類に入ると思うけれど)。
検索したいフレーズがあった場合マウスでその単語をコピペして検索してませんか? Vim(gVimを除く)においてマウスを使う行為はVimを冒涜していると言っても過言ではないかもしれません(笑
なぜならVimではマウスなんて使う必要がないのだから!

検索したいフレーズにカーソルを持って行き(もちろんジャンプ系コマンドで素早く。矢印キー連打なんて厳禁ですぞ!)、おもむろに「*」を叩いて見よう。すると次の検索対象にジャンプすると共に他の検索対象がハイライトされるでしょう。次のに移動したけりゃ「n」、前のに移動したけりゃ「N」を押せばよい。

また、「*」が正順方向に検索したのに対し「#」を使うと逆順方向に検索する。n/Nの動作も逆になる。


ちなみにVimの最下行のステータス・ラインに現在検索中のフレーズが表示されるが、お気付きのように「\<\>」に囲まれた正規表現の「単語」になっている。
よって"proc"にヒットしても"process"にはヒットしないので目的の単語が素早く見つけられる。これはループカウンタによく用いられる「i」とか一文字の変数名等を検索するのに便利。

この正規表現が邪魔な場合は頭に「g」を付ける。「g*」とするとステータス行(?)にも上記の正規表現は付かず"proc"で検索しても"process"にもヒットするようになる。「g#」も同様に使える。


このように検索したい時は単語を打つ必要が無く、その単語上にカーソルを持って行き「*」を押して「n」を押していけば良いのである。ん~楽チン。


2009年4月8日水曜日

AMD派

自宅には3台の(古い)PCがある。買った順番にDuron, Athlon XP, Geode LXと全てAMD製のものだ。
いずれもメモリ512MBで頑張っている。メインマシンはAthlon XPのやつ。
も~5年以上前のものでいい加減買い替えたいが、自作して自分で面倒見てるので全然ガタが来る気配がなく現役でピンピンしているのだ。

でも今年は買うでー。何せDDR2のメモリやSATAのHDDなんて持っていない。。一世代通り越してしまった感がある。

メインマシン

Phenom II(AM3)のベアボーンにしたい。ベアボーン・タイプの電源容量では今のPhenom IIではキツいと思うので低消費電力版を待っているところ。来月辺りに発表があるとの噂なので期待。
ベアボーンはShuttle製かなぁ。でもPhenom版のはバカ高かったのでPhenom II(AM3)版もちと心配。
メモリは4GB(←今の8倍っス!)積んで仮想化技術を体験するぞぃ!

ネットブック

当然ノートPCなんて持ってない。以前までの普通のノートPCは高いだけで魅力無しだったが、最近のネットブックは価格に加え小型軽量化で欲しくなってきた。

Athlon Neoっていう選択肢もあるが今の日本じゃ手に入らなそうなので、Intel製のAtomに浮気するしかなさそー。
で、どれを狙っているかというと現在の日本で唯一Linux(Ubuntu)モデルがあるDellのInspiron mini(9か12)しか選択肢はない。。だって使わんM$なOSに絶対金払いたくないでしょう!!
自慢じゃなけどM$に献金したことは一度もない(だからいつも自作しているんだけど)っていうかソフトに金払ったことがないOSSな生活をしてきている。
(とは言ってもケータイとかでは知らず知らずのうちに払っていると思うのだけれど、Andoridになれば…)

ちなみに他社の日本向けネットブックのいくつかは、Splashtopを組み込んだ高速起動Linuxをデュアルブートで使えるらしい(M$ OSが遅いから)、それもLinuxであることを隠して。
Linuxモデルが買える海外は羨ましぃ。まぁLinuxerとしてはLinuxモデルが欲しいのではなくOS無しモデルがあれば十分なんですけどね。
あと、Andorid版が出るという噂もあるようだけどどうなんでしょう。

組込みボード

仕事ではリファレンスボードやカスタムボードを触っているけどプロジェクトが終われば手元から離れていってしまうので、自分専用の組込みボードが欲しい~
そこで狙ってるのが、Beagle Board。USBホストのErrataが改善されたら是非購入したいものだ。
これにはARM系のが載っている(x86は組込みとは言いませんものね)ので浮気と言えば浮気になるが。。


2009年4月7日火曜日

bash-completion

zshの補完は魅力でもbashを捨てられないという人も多いだろう。自分もそのひとり。その悩みを解決してくれるのが、bash-completionである。

例えば、manの引数にコマンド名を補完しようとしても[Tab]では補完されない(コマンド名補完は[Alt-!]で可能だが)といった経験があると思う。bash-completionはそのコマンドの文法(オプション)に合わせて補完してくれるので[Tab]を叩いていればよい。

ただし、manの場合は存在するコマンドから補完するのでなく、manが存在するコマンド名を補完しようとするみたいなので、初回はその検索に時間を多少要する。
それが、rpm や yum のパッケージ名になるとDBが大きいので顕著になるので注意。キャッシュに残っていれば速いがそうでない場合は、"rpm -qa"とかをしているのと同じスピードになってしまうので。

次にtarコマンドの場合、foo.tbz2 と hoge.tgz の2つのみがカレントにあるとき
$ tar zxf [Tab]
とファイル名の頭文字さえも打たずに[Tab]しても zオプションなので".tbz2"は対象外となり、ちゃんと hoge.tgzの方が補完される。
また、hello.sとhello.oの2つみがある場合も
$ vi [Tab]
でhello.sを補完してくれる。

svnやgit、mercurialなどのサブコマンドが必要な場合でもそれぞれに合った補完をしてくれる。
また、killのようにPIDが必要な場合でも存在するPIDが補完される(PIDは順に振られるため補完対象が決定するまでタイプしてると結局全部タイプしてたとかということもあるので、あまり役に立たないけど)。

極めつけは、make。Makefile内のターゲットを都度確認して補完してくれるのだ。
「clean」ターゲットがあれば"make c[Tab]"で補完してくれるが、無い場合は補完しないといった具合に。更にMakefileからincludeされているファイルも解析するので、「menuconfig」や「uImage」なども補完してくれる(その分補完に時間が掛かるが)。
もちろん、その他コマンドに対してもキメ細かな補完をしてくれる。


インストールは以下で完了。
$ sudo yum -y install bash-completion

ただし、デフォルトの状態ではお節介過ぎる補完があるので修正をする。

"~/De[Tab]"とすると、通常は"~/Desktop/"と補完されるが、bash-completionの場合"/home/okap/Desktop/"とお節介なほどに補完されてしまう。「~」の方がスッキリしていて見やすいのでそこをホームディレクトリ名に展開されると長ったらしくなり困るのだ。

$ sudo vim /etc/bash_completion
...
# This function expands tildes in pathnames
#
_expand()
{
    [ "$cur" != "${cur%\\}" ] && cur="$cur\\"

    # expand ~username type directory specifications
    if [[ "$cur" == \~*/* ]]; then
        eval cur=$cur

    elif [[ "$cur" == \~* ]]; then
        cur=${cur#\~}
        COMPREPLY=( $( compgen -P '~' -u $cur ) )
        return ${#COMPREPLY[@]}
    fi
}
...
この部分でevalしてるのがお節介な箇所。なのでbashの"何もしない"(組込み)コマンド「:」に置き換える。
        eval cur=$cur
             ↓
        #eval cur=$cur
        :

これで新しいセッションでは、「~」がホームディレクトリ名に展開されなくなる。



2009年4月5日日曜日

visdo, vim(root), view

sudoコマンドを使えるように設定

(ubuntuはsudoで全て行うポリシーなのでデフォルトで設定済みかと思うけど)
# visudo
...
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
okap    ALL=(ALL)       ALL
...

ちなみに、visudoは/etc/sudoersをviで編集しているだけだが、排他のため/etc/sudoers.tmpを編集している。vipwやvigrも同様に排他をかけている。

rootユーザでもvimを

Fedora(というよりRedHat)ではrootユーザではviがvimにリンクされていない。
「vim」と打てば良いだけだが意外と面倒である。(rootでvimを使うときって大概設定ファイルをいじる時だからカラー表示してくれるだけでも違う!)

そこで、rootでもviでvimが起動出来るようにする。
# vi /etc/profile.d/vim.sh
if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
  [ -x //usr/bin/id ] || return
  [ `//usr/bin/id -u` -le 100 ] && return
  # for bash and zsh, only if no alias is already set
  alias vi >/dev/null 2>&1 || alias vi=vim
fi

このスクリプトを見ると、uidが100以下の場合は以降のaliasが設定されない。
rootは当然uid=0なので、その判定をコメントアウトしてしまう。
  [ `//usr/bin/id -u` -le 100 ] && return
                    ↓
# [ `//usr/bin/id -u` -le 100 ] && return

これで、この設定を読み込むか新しいセッションではrootでviとしてもvimが起動するようになる。

viewでもvimに

viewとは "vi -R" つまりRead-onlyでファイルを開くコマンドである。"view:眺める(Read-only)"と"vi"をかけているのだと思う(笑
Vimerが言うのも何だがvimでファイルを閲覧中にキーを触って(vimのコマンド・モードが幸いし)変更してしまうことがる。なのでソースやスクリプトを見るときはviewを使用している。
でも上記同様Fedoraでは、viewは一般ユーザでもviにリンクされているのでviewとしてもカラー表示されない。
# which view
/bin/view
# ll `!!`
ll `which view`
lrwxrwxrwx 1 root root 2 2009-03-23 17:54 /bin/view -> vi

なので、vimにリンクを張り直す。
# rm /bin/view
rm: remove シンボリックリンク `/bin/view'? y
# which vim
/usr/bin/vim
# ln -s /usr/bin/vim /bin/view
# ll `which view`
lrwxrwxrwx 1 root root 12 2009-04-05 22:19 /bin/view -> /usr/bin/vim

これで、新しいセッションではviewでもvimが起動するようになる。

ちなみにこのリンクでコマンド名を変える手法はbusyboxのに似ている。
lsなら、"busybox ls"と引数指定でも実行出来るけど、/bin/busybox を /bin/ls にリンクを張っておくと、lsで実行出来るようになる。argv[0]で判別しているのだと思う。



2009年4月3日金曜日

GUIのテキストフィールドでもbash風キーバインドを!

正確にはbash風キーバインドというよりEmacs風キーバインドなのですがVimerなもので(汗

Gnomeアプリのテキストフィールドやテキストエリアでbashと同じように
C-A/E:カーソルを行頭/行末へ移動、C-H/D:BackSpace/Delete などが使えると便利(いや、使えないとストレスが溜まる)。というCtrl派(?)なので、もちろん私はキーボード設定で紹介した通りCtrlは"A"の左にないとダメな人です。

ちなみにbashのキーバインドはほぼ理解しているつもりです(man見て理解できなかったキーバインドはbashのソース見て理解したことも)。便利なbashキーバインドもおいおい紹介するつもりでつ。

設定方法はまず、gconf-editorをインストール。
# yum -y install gconf-editor

gconf-editorを起動
$ gconf-editor

「desktop」->「gnome」->「interface」->「gtk_key_theme」を"Default"→"Emacs"に。

すると直後から、firefox(Gnomeアプリじゃないけど)やgedit等でEmacs風キーバインドが手に入りまっす! firefoxのグーグルバーやWebサイトのテキストフィールドの入力が快適になります。
firefoxが途中のバージョンからC-AがM$ OSのように全選択に変わってしまったのにはショックでしたが、この方法で起死回生。ちなみに、この状態でもAlt-Aで全選択はできます(私は全選択なんて殆ど使わんのですが)。geditでは無理のようですがそこまでgeditを使い込まないので。

また、geditのようなテキストエリアではC-P/Nがカーソルの上/下移動になるようです。Emacsでもそうなのか? bashではコマンド履歴のPrevious/Nextなのでカーソルの上/下移動というのもまんざらでもないが。



2009年4月2日木曜日

カスタマイズ 〜その2〜

Nautilusの設定

シングルクリック派なので「動作」項目でそれに設定。また「常にブラウザ・ウィンドウで開く」にチェックしクラシック・スタイルに変更。

スクリーンセーバ

「画面をロックする」のチェックを外し、復帰時パスワード不要に。

ウィンドウ挙動

タイトルバーをダブルクリックで「巻き上げ」に設定。最近のデフォルトの「最大化」はどうもM$ユーザを意識した作りで、昔からのLinuxユーザにとっては「巻き上げ」がデフォルトであって欲しいものだ!(最大化したけりゃ「+」ボタン押せばよいだけの話だし)

あと今回から「横に最大」や「縦に最大」という項目が増えていたが、KDEは昔から「+」ボタンをクリックなら最大化、中クリックなら縦に最大化、右クリックなら横に最大化というのが以前からあって羨ましかった。ダブルクリックで一つしか選べないとなるとやっぱ「巻き上げ」以外考えられません!だってウィンドウの後ろにあるウィンドウなりアイコンなりを表示させるのにウィンドウの移動は戻すのが手間だし、最小化も大袈裟だと。

Gnomeパネル

システムモニタ:
 非力なシングルコアCPUなので動作が重くなった時に重宝する。
 CPU以外にメモリ、ネットワーク、スワップ、ハードディスクを追加。
 CPUはIOWaitをピンク系の色にして、単に処理が遅いのか、I/O Waitのせいか分かり易くしておく。また、ハードディスクは書き込みを黄色にしてR/Wのの区別をはっきりさせる。






天気(GNOME Weather):
 「お天気」アプリを追加して、レーダー・マップを設定する。レーダーにはasahi.comの天気予報のレーダーを使う。
 ※最新が30分以上前のレーダー情報なのが何点だが、雨は西から来るので何とか予測できる範囲

下部の(ウィンドウ一覧やワークスペースがある)パネル:
 自動で隠すに設定。これでオン・マウスしたときだけ下部パネルが現れるので少しワークスペースが広くなる。

Tomboyのアンインストール:
 Gnomeパネルの右上の方のメモ帳のようなアイコンにオン・マウスすると「Tomboyメモ」とでるが、このデスクトップ・メモを昔使った感想はいまいち使い難くメモリ消費大きかったので替わりに「付箋紙」というアプリを使用する。
Tomboyの動作を確認してみると
$ ps ax| grep tomboy
2750 ? Sl 0:02 mono /usr/lib/tomboy/Tomboy.exe --panel-applet --oaf-activate-iid=OAFIID:TomboyApplet_Factory --oaf-ior-fd=36
拡張子が.exeって;) これじゃM$ OSじゃん。キモいので早速アンインストール。

1) まず、動作を止めるのにパネルから削除

2) RPMパッケージを確認
# rpm -qf /usr/lib/tomboy/Tomboy.exe
tomboy-0.12.0-5.fc10.i386

3) パッケージのアンインストール
# rpm -e `!!`
rpm -e `rpm -qf /usr/lib/tomboy/Tomboy.exe`