1

私は elisp にかなり慣れていないので、検索中にハイライト動作を設定する関数を定義しようとしていました。目標は次のとおりです。 の後i-search、 でハイライトをクリアできるようにしC-gたいのですが、Enter キーを押してもハイライトが残るようにします。

だから私は自分の関数を次のように定義しましたinit.el

(defun keyboard-quit-cleanup ()
  "clean up highligh after keyboard quit"
  (keyboard-quit)
  (lazy-highlight-cleanup))
(global-set-key (kbd "C-g") '(keyboard-quit-cleanup))

しかし、それは機能しません。ここで何が問題なのですか?

ありがとう!

4

1 に答える 1

5

たくさんのこと、私は恐れています:)

  1. あなたglobal-set-keyは壊れています:

    (global-set-key (kbd "C-g") 'keyboard-quit-cleanup)
    

    いいえ:

    (global-set-key (kbd "C-g") '(keyboard-quit-cleanup))
    

    (どこで見ましたか??)

  2. カスタム関数は対話型コマンドではないため、キーにバインドできません。次のようにする必要があります。

    (defun keyboard-quit-cleanup ()
      "Clean up highlights after keyboard quit."
      (interactive)
      ...)
    
  3. FORCEおそらく引数を使用したいと思うでしょうlazy-highlight-cleanup

  4. あなたは間違ったことを縛っています。

    C-gキーマップにバインドさisearch-abortれていisearch-mode-mapます。

    (編集:そしてトリプルのコメントによると、グローバルバインディングをいじるのは確かに悪い考えです。それに関連する特別な動作が間違いなくあり、それを壊す危険を冒したくありません。)

  5. 標準の動作に追加の動作を追加しようとしている場合は、おそらくフック (好みによる) またはいくつかのアドバイスを使用することをお勧めします。この場合、使用できる便利なフックがあります。

    見るC-hv isearch-mode-end-hook RET

    (add-hook 'isearch-mode-end-hook 'my-isearch-end)
    (defun my-isearch-end ()
      "Custom behaviours for `isearch-mode-end-hook'."
      (when isearch-mode-end-hook-quit
        (lazy-highlight-cleanup t)))
    

(そうでなければ、デフォルトでクリーンアップが行われるため、通常どおりにlazy-highlight-cleanup設定したと思います。)nil

于 2013-05-29T04:34:34.893 に答える