handlename's blog

コード片など

anything-c-source-occurが動かなかったのでちょっといじった。

なんだか定番らしいanything.elですが,ぼくはつい昨日(!)存在を知りました。 で,早速使ってみて「お〜?おー!」とかやってたんですが, anything-config.elで定義されているanything-c-source-occurが うまく動かない感じだったのでちょこっといじりました。

何がどううまく動かなかったかというと, anything-c-source-occurの一覧から選択すると,

Wrong number of arguments: (lambda (numline) "Replacement of `goto-line'." (goto-char (point-min)) (forward-line (1- numline))), 2

と,なってしまってたんですね。 行数はわかるけどその場所に飛べない,と。 すごく残念。

エラーの該当箇所を探したらanything-config.el中のanything-goto-lineでした。 anything-c-source-occurの定義中でanything-goto-lineを呼び出してる部分を見ると, 確かに引数の数が間違ってました。 定義では行数のみを与えるようになってますが,呼び出しでは行数と対象のバッファを渡しているようです。

そこで,余計だと思われる2つめの引数を取っ払ったらうまく動くようになりました。 以下はその修正点。

*** anything-config.org.el     2010-02-07 13:51:49.000000000 +0900
--- anything-config.el     2010-02-07 13:51:17.000000000 +0900
***************
*** 3733,3739 ****
                            (let ((lines (split-string (buffer-string) "\n" t)))
                              (cdr lines)))))))
      (action . (("Goto line" . (lambda (candidate)
!                                 (anything-goto-line (string-to-number candidate) anything-c-source-occur-current-buffer)))))
      (requires-pattern . 1)
      (volatile)))
  ;; (anything 'anything-c-source-occur)
--- 3733,3739 ----
                            (let ((lines (split-string (buffer-string) "\n" t)))
                              (cdr lines)))))))
      (action . (("Goto line" . (lambda (candidate)
!                                         (anything-goto-line (string-to-number candidate))))))
      (requires-pattern . 1)
      (volatile)))
  ;; (anything 'anything-c-source-occur)

バージョンアップしたときに定義が変わったんですね。きっと。