2012-05-10 9 views
1

私はオートコンプリートモードを使用しています。それは多くの主要なモードで正常に動作します。しかし、私はTABを使って候補者を選ぶのが好きではありません。Emacs:自動復帰モードで正常終了キー機能を破らずにRETを補完する方法は?

マニュアルは補完を選択するために、RETを使用するためのLispのこの例の行を持っています

(define-key ac-mode-map (kbd "RET") 'auto-complete) 

これは補完のための素晴らしいです。

ただし、RETを使用して候補を選択できるようになったため、RETを使用して改行を挿入することはできなくなりました。

両方を行うことはできますか?

理想的には、RETを使用して補完リストから候補を選択したいのですが、リストが表示されていない場合は、RETを通常使用したいと思います。

どうすればよいですか?

答えて

1

RETキーを再マップすることはできません。あなたが言うように、デフォルトの動作を失うからです。あなたはオートコンプリートのための単語の末尾にあるかどうかを確認する機能を構築し、それ以外の場合は通常のことを行うようになってきました:

(defun complete-or-newline (arg) 
    (if (and 
     (or (bobp) (= ?w (char-syntax (char-before)))) 
     (or (eobp) (not (= ?w (char-syntax (char-after)))))) 
     (auto-complete) 
    (newline-and-indent))) 

このスニペットは、このpostの変形例です。

次に、機能を使用するためにRETを再マッピングします:

(define-key ac-mode-map (kbd "RET") 'complete-or-newline) 

このソリューションでは、2つの欠点があります。

  • をあなたはauto-completeに引数を渡すことはできません。これはinteractiveで行うことができますが、どのように動作するのか正確にはわかりません。

  • 行の最後にRETキーを押すと、新しい行を挿入する代わりにauto-completeを実行しようとします。どのように私は知らないが、あなたは状態を改善する必要があります。

関連する問題