1

現在、emacs にはimenu、現在のバッファー内の関数のリストを表示できる便利な機能があります。これを実現するにはM-x、を入力してから を入力し、 キーをimenu押すと、ミニバッファーにプロンプ​​トが表示されます。これは非常に優れていて便利ですが、タイピングの量を減らして、シーケンスの最初の部分を何らかの形でマクロ化したいと考えています。私はこのアプローチを試しました:returnfunc

(defun my-imenu-go-function-list ()
  (interactive)
  (imenu "func"))

(global-set-key (kbd "C-x C-o") 'my-imenu-go-function-list)

別の試み:

(defun my-imenu-go-function-list ()
  (interactive)
  (imenu)
  (execute-kbd-macro [?f ?u ?n ?c return]))

しかし、どれも機能しませんでした。別の可能性はありますか?

4

2 に答える 2

2

sebs の答えは、私が今まで見たことのない非常に巧妙なトリックを示しています。ただし、以下はもう少し直接的です。

(imenu (assoc "func" (imenu--make-index-alist)))

ただし、(慣例により)プライベート関数に依存するため、YMMV. この連想リストの値を返すための明らかな API が見つかりません。

于 2014-12-17T04:20:48.503 に答える
1

関数を対話的に呼び出す必要があります。

以下を試してください。それはうまくいくはずです。

更新しました:

(defun my-imenu-go-function-list ()
  (interactive) 
  (let ((unread-command-events  (listify-key-sequence "func\n") ))
  (call-interactively 'imenu)))

Windows を使用している場合は、キャリッジ リターンを「\r」または「\r\n」に変更する必要がある場合があります。

于 2014-12-14T22:24:36.813 に答える