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

helm-etags-selectを改良する

emacs helm ctags

Pythonのコードを理解する必要があったので ctagsなるものを初めて
使ってみましたが, その helmインタフェースである helm-etags-selectが
若干不満だったので修正しました.

問題

カーソル以下の symbol名で初めは絞りこまれているんですが,
1文字でも入力してしまうと, 1からの絞り込みになってしまい,
カーソル以下の symbol名との and検索で絞り込むのが面倒くさい

原因

該当する sourceで helm関数を実行するときの :default属性のみが
設定されているため.

コード

カスタマイズの余地がなかったので, :input属性だけを追加した,
新しい関数を追加しました.

(defun my/helm-etags-select (arg)
  (interactive "P")
  (let ((tag  (helm-etags-get-tag-file))
        (helm-execute-action-at-once-if-one t))
    (when (or (equal arg '(4))
              (and helm-etags-mtime-alist
                   (helm-etags-file-modified-p tag)))
      (remhash tag helm-etags-cache))
    (if (and tag (file-exists-p tag))
        (helm :sources 'helm-source-etags-select :keymap helm-etags-map
              :input (concat (thing-at-point 'symbol) " ")
              :buffer "*helm etags*"
              :default (concat "\\_<" (thing-at-point 'symbol) "\\_>"))
      (message "Error: No tag file found, please create one with etags shell command."))))

これで初期の入力として, カーソル以下の symbol名が入力された状態になり
絞り込みが意図通りできるようになりました.