読者です 読者をやめる 読者になる 読者になる

anything-gtagsのシンボル長の制限を取り払う。

emacs anything

仕事柄カーネルソースコード見ることが多くて、anything-gtagsは
かなり愛用しているんですけど、シンボル長が長いものを検索すると
なんか変ってなりました。具体的には以下のような感じです。



GNU globalでシンボルを調べる場合、調べているシンボル名が各行に
表示されます。調べてるものをわざわざ表示する必要がないだろって
ことでそれを除去しようとしているんだと思います。ソースコード
見て確認してみると、はじめのカラムを取り除いているのではなく、
最初から 16文字を取り除いているだけでした。なんではじめの空白までの
文字位置を調べて、それが 16文字いないであれば 16文字、それ以上で
あればはじめの空白までを除去するよう修正してみました。


パッチは以下のとおりです。(追記 タグジャンプができない場合が
あったので修正しました。2011/JAN/17)

diff --git a/anything-gtags.el b/anything-gtags.el
index 814a3e7..38b492a 100644
--- a/anything-gtags.el
+++ b/anything-gtags.el
@@ -199,8 +199,16 @@ If it is other symbol, display file name in candidates even if classification is
 (defvar aggs-buffer "*anything gtags select*")
 
 (defun aggs-candidate-display (s e)
-  ;; 16 = length of symbol
-  (buffer-substring-no-properties (+ s 16) e))
+  (buffer-substring-no-properties (aggs-search-not-space-point s e) e))
+
+(defun aggs-search-not-space-point (s e)
+  (save-excursion
+    (goto-char s)
+    (let ((space-point (re-search-forward " " e t)))
+      (if (and space-point (> (- space-point s) 16))
+          (- space-point 1) ; for buffer-substring
+        (+ s 16)))))
+
 (defun aggs-set-anything-current-position ()
   (declare (special c-source-file))
   ;; It's needed because `anything' saves

Emacs Lispというか Lisp自体よくわかっていないので、
こんな修正でいいのかはわからないですけど、望むような
感じにできました。


追記

パッチが取り込まれました。最新版にアップデートしてください。
EmacsWiki: anything-gtags.el


人生初パッチ。