ブックマークのスクロール位置の記憶@Firefox3

今までFirefoxを使っていて不便に思っていたことの一つに、サイドバーのブックマーク を一度閉じて再び開くと、スクロールバーの位置が一番上になってしまい、開くたびにスクロールしないといけないことがあった。

これを完全に解消するとまではいかないが、All-in-one Sidebarというアドオンを入れることで、閉じる時に開いていたブックマークのフォルダの位置までスクロールしてくれます。

ただし、入れただけでは、デフォルトは復元してくれません。All-in-one Sidebarの設定項目を開いても設定箇所がありません。サイドバーのブックマークの検索欄の右に現れるアイコンをクリックして、”最後に選択されたフォルダを記憶してフォーカスする”にチェックすればOKです。


ログファイル監視 + イベントスクリプト@ruby

ログファイルを監視して、ある文字列が出力されたらイベントを発生させたかったので、rubyで監視スクリプトを書いたので紹介します。

“log”というファイルを”hoge”という文字列で監視したい場合の使い方。

$ ./monitor.rb log hoge
ファイルlog を文字列hoge で監視します

ここで、他のコンソールから

$ echo "1234hoge5678" >> log

とすると下記のように出力されて終了します。

*** MATCH : 1234hoge5678

ログによってはcronでローテーションされて切り詰められて、新しい空のファイルになることもあるので、 その場合は古いファイルを見ずに新しいファイルを見るような処理も入っています。

ファイル名 : monitor.rb
-------------------------
#!/usr/bin/ruby

def usage()
    puts "nusage : ./monitor.rb filename string"
    puts "          filenameで指定されたファイルをstringで監視し、マッチすれば終了します"

end

if (ARGV[0].nil? || ARGV[1].nil?)
    puts "引数が足りません"
    usage()
    exit!
else
    begin
        filename = ARGV[0]
        file = File.open(filename, "r")
        filesize = File.size?(filename)
        if (filesize == nil)
            filesize = 0
        end
    rescue => e
        puts e
        puts filename + "を開くことができません"
        usage
        exit!
    end
    str = ARGV[1]
    puts "ファイル" + filename + " を文字列" + str + " で監視します"
end

#最終行まで移動
file.seek(0,IO::SEEK_END)

begin
    # 読み込みループ
    while (true) do
        line = file.gets()
        if (! line.nil?)
            if ( /#{str}/ =~ $_ )
                puts "*** MATCH : " + $_
                exit
            end
        else
            sleep(0.5)

            if ( ! File.exist?(filename))
                puts "ファイルが削除されました"
                file.close()
                exit!
            end

            newFilesize = File.size?(filename)
            if (newFilesize == nil)
                newFilesize = 0
            end
            if ($DEBUG)
                puts "oldsize : "+ filesize.to_s + " newsize : " + newFilesize.to_s
            end
            if (newFilesize < filesize)
                puts "ファイルが切り詰められました. 新しいファイルを読み込みます"
                file.close()
                begin
                    file = File.open(filename)
                rescue => e
                    puts e
                    puts "ファイルを再オープンできません"
                    exit!
                end
                file.seek(0,IO::SEEK_END)
            end
            filesize = newFilesize
        end
    end
ensure
    if (! file.closed?)
        file.close()
    end
    exit!
end

rubyのexitの終了コード@1.8.5 and 1.8.7

最近rubyを使い始めて、いざプログラムを書いたところ、終了ステータスがうまく戻らないようで、困ってます。
rubyにはプログラムを終了するのにexitとexit!というのがあり、ドキュメントを見る限り、exitのデフォルトは終了ステータスが”0″で、exit!は”-1″のようです。

そこでLinux上やcygwin上のbashのirbで実験してみたところ、

>>exit
echo $?
0
>>exit (1)
echo $?
0
>>exit!
echo $?
1
>>exit! (1)
echo $?
1
>>exit! (0)
echo $?
0

となってしまい、exitで何を指定しても0になりません。 バグなんでしょうか?


rubyのirbで補完@cygwin

cygwin上でrubyのirbを動かしている時に、ふと補完ができたら便利だと思って調べてみたら、すでに作っている人がいるじゃないですか。皆さん考えることは同じなのね。

Wirbleというのをgemでインストールしないといけないらしいのですが、 cygwinのインストーラではインストールできないようなので、gemをまずはここからダウンロード。maznはrubygems-1.2.0.tgzをダウンロードしました。

インストールは簡単です。

# tar zxvf rubygems-1.2.0.tgz
# cd  rubygems-1.2.0
# ruby setup.rb

以上です。次にWirbleをインストールします。

# gem install -y wirble

参考にしたサイトでは上記コマンドでインストールできなかったとのことですが、maznの環境ではこれでOKでした。

あとは、 ~/.irbrc がなければ新規作成して、以下を書き込みます。

# vi ~/.irbrc
# load libraries
require 'rubygems'
require 'wirble'
# start wirble (with color)
Wirble.init
Wirble.colorize

これでTABで補完ができるようになったり、色がついたりします。

参考
http://journal.mycom.co.jp/articles/2006/12/22/wirble/
http://turn-addict.vox.com/library/post/cygwin%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8Bruby.html


viで制御コードの入力

.vimrcといった設定ファイルを書いていると、制御コードを入力したいときがあります。これは、Ctrl-v を押した後に目的のキー、またはCtrl+○で入力すればできるようです。

制御コードの参考 : http://ash.jp/code/ctrltbl.htm]

cygwin上のvimでは、デフォルトでBackspaceがうまく動作しません。日本語も表示できないため、~/.vimrcに以下を追記してあげましょう。^Hはもちろん制御コードです

noremap <BS> ^H
noremap! <BS> ^H

set encoding=japan