anythingを使い込んでいくと、たくさんのanythingソースを追加したくなってきて、段々と重くなってきます。また、anything-c-source-google-suggestやanything-c-source-locate(便利だが若干重い)、anything-c-source-emacs-functions等、普段は使わないような情報源も何らかのショートカットを利用して選択出来るようになると便利だと思いました。
anythingはまだまだ進化中のため様々な方法が提案されています、勉強になります。
- anything.elで表示中の情報源を選択して絞り込むコマンド - ’(rubikitch wanna be (a . lisper)) → RubikitchAnythingConfiguration内にも同様のソースがある
- anything-sourceを選択してanythingを起動するanything-source - IMAKADO::BLOG → Emacsのグローバル名前空間から逆に引っ張り出す方法、すげー何か他にも使えそう
上記のように直接anythingソースを選択する方法も便利ですが、anything-sourcesのリストを手動で作成して、その中から選択する方法を考えてみました。
anything-select-sources-list という変数にanything-sourcesのリストを渡すと、C-1 〜 C-9 でページを切り替えることが出来ます。
既知の不具合
- anything-c-source-files-in-current-dir等が、ページを切り替えても情報が更新されない。anything-set-sourcesの使い方間違ってるかな?
- 本当は一つ一つのページに名前を付けて、ページ自身もanythingで選択できるようにしたい
ソース
(defvar anything-sources-list nil "anything sources list. for anything-select-sources-list") (defun anything-select-sources-list (num) (anything-set-sources (nth num anything-sources-list))) ; anything-select-with-digit-shortcut とキーバインドが被ってしまっているが、他にいいキーバインドが見付からなかったのでやむなく・・・。 (define-key anything-map (kbd "C-1") '(lambda () (interactive) (anything-select-sources-list 0))) (define-key anything-map (kbd "C-2") '(lambda () (interactive) (anything-select-sources-list 1))) (define-key anything-map (kbd "C-3") '(lambda () (interactive) (anything-select-sources-list 2))) (define-key anything-map (kbd "C-4") '(lambda () (interactive) (anything-select-sources-list 3))) (define-key anything-map (kbd "C-5") '(lambda () (interactive) (anything-select-sources-list 4))) (define-key anything-map (kbd "C-6") '(lambda () (interactive) (anything-select-sources-list 5))) (define-key anything-map (kbd "C-7") '(lambda () (interactive) (anything-select-sources-list 6))) (define-key anything-map (kbd "C-8") '(lambda () (interactive) (anything-select-sources-list 7))) (define-key anything-map (kbd "C-9") '(lambda () (interactive) (anything-select-sources-list 8))) ; ソースの設定 (setq anything-sources (list anything-c-source-buffers anything-c-source-files-in-current-dir anything-c-source-recentf anything-c-source-emacs-commands anything-c-source-info-pages anything-c-source-bookmarks )) (setq anything-sources-for-file (list anything-c-source-files-in-current-dir anything-c-source-file-name-history anything-c-source-locate)) (setq anything-sources-for-emacs (list anything-c-source-apropos-emacs-commands anything-c-source-apropos-emacs-commands anything-c-source-apropos-emacs-variables anything-c-source-call-source)) (setq anything-sources-for-internet (list anything-c-source-anything-google-fallback anything-c-source-hatena-bookmark)) (setq anything-sources-for-test (list anything-c-source-ruby)) ; anythingソースのリスト ; anything-select-sources-listのページ番号に対応する (setq anything-sources-list (list anything-sources anything-sources-for-file anything-sources-for-emacs anything-sources-for-internet anything-sources-for-test))