dreamedge.net

ecbでのrubyのパース

2009-08-31T13:39:00+0000

ecbでもrubyスクリプトをパースしてくれるのだけど,デフォルトだとファイルの読み込み時にしか解析してくれない.
特に新規にスクリプトを作成した時はなにも表示してくれないので,非常に作業効率が悪かった.

気合い入れてマニュアルを眺めてみると,imenuやetagsで解析するファイルに関しては解析内容を自動でアップデートする設定が必要とのことだった.rubyはimenuで解析をしているので,imenu-auto-scanを設定すればOK.

(setq imenu-auto-rescan t)

ちなみにこの設定があれば,”C-c . r”で再解析をしてくれるようになる.

手動でimenuの解析を行う場合は,”M-x imenu RET Rescan“を入力するとよいらしい.
http://d.hatena.ne.jp/wagavulin/20090104/1231093612

このエントリーをはてなブックマークに追加
Bookmark this on Delicious

アウトラインモードのコマンド

2009-08-29T11:30:00+0000

READMEとか簡単なメモとかを書く時にアウトラインモードを利用しているんだけど,中々コマンドを覚えられない.
ecb使っていると見出し一覧がメソッドフレームに表示されるから,表示非表示とかの操作をやる必要がないのが原因.
まあ別に覚える必要もないのですが,うっかり非表示にして焦った時用にメモ.

  • Ctrl-c Ctrl-t 章/節見出しだけを表示
  • Ctrl-c Ctrl-a 全て表示
  • Ctrl-c Ctrl-p 前の見出しに移動
  • Ctrl-c Ctrl-n 次の見出しに移動
  • Ctrl-c Ctrl-b 同じ階層レベルの前の見出しに移動
  • Ctrl-c Ctrl-f 同じ階層レベルの次の見出しに移動
  • Ctrl-c Ctrl-u カーソルがある章/節の親見出しに移動
  • Ctrl-c @ カーソルがある章/節見出しに移動してマークを設定
  • Ctrl-c Ctrl-o カーソルがある章/節以外の本文を非表示
  • Ctrl-c Ctrl-c カーソルがある章/節の本文を非表示
  • Ctrl-c Ctrl-e カーソルがある章/節の本文を表示
  • Ctrl-c Ctrl-l カーソルがある章/節と下位階層の本文を非表示
  • Ctrl-c Ctrl-d カーソルがある章/節の下位階層を全部非表示
  • Ctrl-c Ctrl-s カーソルがある章/節の下位階層を表示

使用法とかは以下のページを参考にした.

このエントリーをはてなブックマークに追加
Bookmark this on Delicious

ChangeLogMEMOモード(clmemo.el)の設定

2009-08-27T21:49:00+0000

配布元は以下のページ.

http://pop-club.hp.infoseek.co.jp/emacs/changelog.html#clmemo

http://pop-club.hp.infoseek.co.jp/emacs/prog.html#clgrep

;; ChangeLog memo
(autoload 'clmemo "clmemo" "ChangeLog memo mode." t)
;; あなたの ChangeLog メモファイルへのパス
(setq clmemo-file-name "~/project/memo/ChangeLog")
;; 好きなキーへバインド(ここでは"\C-x m"に設定)
(global-set-key "\C-xm" 'clmemo)
;; タイトルの補完入力設定
(setq clmemo-title-list '("idea" "memo" "todo"))
;; タブでindentするようにする(デフォルトではinline-dateに飛んでしまう)
(add-hook 'clmemo-mode-hook
          '(lambda ()
             (define-key clmemo-mode-map "\C-i" 'indent-for-tab-command)))

;; CahgeLog Grep
(autoload 'clgrep "clgrep" "grep mode for ChangeLog file." t)
(autoload 'clgrep-title "clgrep" "grep first line of entry in ChangeLog." t)
(autoload 'clgrep-header "clgrep" "grep header line of ChangeLog." t)
(autoload 'clgrep-other-window "clgrep" "clgrep in other window." t)
(add-hook 'change-log-mode-hook
     '(lambda ()
        (define-key change-log-mode-map "\C-c\C-g" 'clgrep)
        (define-key change-log-mode-map "\C-c\C-t" 'clgrep-title)))

とりあえず覚えておくと便利なショートカット

  • \C-x m : 項目の追加
  • \C-u \C-x m : カーソルのある過去に項目追加
  • \C-q \C-i : TABの入力
  • \C-c ( : tagの追加 defaltではfileとurlのタグがある
  • \C-c \C-g : ChangeLog grep
  • \C-c \C-d RET : カーソルのある日付のタグ入力
このエントリーをはてなブックマークに追加
Bookmark this on Delicious

HTTP接続のタイムアウト設定

2009-08-26T21:36:00+0000

rubyのhttp通信は,60秒でタイムアウトするように設定されている.通常はそれで問題ないのだけど,自前のスクリプトとかで時間のかかるモノを動かす場合に困る.

このタイムアウト時間はNet::HTTPのinitializeプロセスで60秒に設定されて,その後read_timeoutメソッドで変更可能になっている.
net/http.rb(Debian系なら/usr/lib/ruby/1.8/net/http.rb)を見ると下のような感じに書かれている.

    # Creates a new Net::HTTP object for the specified +address+.
    # This method does not open the TCP connection.
    def initialize(address, port = nil)
      @address = address
      @port    = (port || HTTP.default_port)
      @curr_http_version = HTTPVersion
      @seems_1_0_server = false
      @close_on_empty_response = false
      @socket  = nil
      @started = false
      @open_timeout = nil
      @read_timeout = 60
      @debug_output = nil
      @use_ssl = false
      @ssl_context = nil
    end
---中略---
    # Seconds to wait until reading one block (by one read(2) call).
    # If the HTTP object cannot open a connection in this many seconds,
    # it raises a TimeoutError exception.
    attr_reader :read_timeout

    # Setter for the read_timeout attribute.
    def read_timeout=(sec)
      @socket.read_timeout = sec if @socket
      @read_timeout = sec
    end

この実装自体は自然なんだけれど,open-uriとかのラッピングされた状態で扱う場合にタイムアウトの変更ができなくて困る.どうしたらいいかと情報を探していたら,Net::HTTPを上書きしちゃう方法が照会されていた.

class Net::HTTP
  def initialize_new(address, port = nil)
    initialize_old(address, port)
    @read_timeout = 120
  end
  alias :initialize_old :initialize
  alias :initialize :initialize_new
end

かなり力ずくだけど確かに有効.

このエントリーをはてなブックマークに追加
Bookmark this on Delicious

version up

2009-08-17T06:10:00+0000

しばらく放置していたけど,一念発起してmephistoのバージョンアップをしてみた.
ちょっと作りが複雑になった気がするけど,満足いく状況.
けどドキュメントの少なさは納得いかないなぁ.なんでこんなにもないんだろう.

このエントリーをはてなブックマークに追加
Bookmark this on Delicious