0

(TeX関連モードでは)ポイントが何か(特に線の端)にある場合は通常どおりチルダキーを挿入しますが、ポイントがスペースにある場合はチルダで上書きします。(これは、TeXソースファイルに何かを貼り付けた後の非常に便利な機能です。)私は次のようなものをハッキングしました。

(defun electric-tie ()
  "Inserts a tilde at point unless the point is at a space
character, in which case it deletes the space first."
  (interactive)
  (while (equal (char-after) 32) (delete-char 1))
  (while (equal (char-before) 32) (delete-char -1))
  (insert "~"))

(add-hook 'TeX-mode-hook (lambda () (local-set-key "~" 'electric-tie)))

私の質問は単純です:それは正しいですか(それはうまくいくようです)、それはもっとうまくいくことができますか?(最初の質問に対する答えが肯定的である場合、後者はスタイルの問題であると思います。)

4

2 に答える 2

3

前述のように、数値リテラルよりも「文字」リテラルを使用することをお勧めします。、、のいずれかを選択できます。最後の1つは?\ ?\sEmacs-22以降でのみサポートされますが、(あなたが言うように)「より見やすく」、スペース文字が表示されるリスクがないため、それ以外の場合は推奨される方法です。塗りつぶし段落や空白のトリミングなどによって、他の何かに変わった(または削除された)。

eqの代わりに実際に使用できますequalが、違いは重要ではありません。

最後に、(call-interactively 'self-insert-command)手動で挿入するのではなく呼び出しますが、違いはそれほど重要ではありません(たとえば、で3つのチルダを挿入できますC-u ~)。

于 2012-11-24T14:26:54.173 に答える
2

いくつかのポイント:

  1. 文字リテラルを表現するために(疑問符スペース)を32使用する代わりに。

  2. メジャーモードフックでキーを定義する代わりに、eval-after-loadブロックで定義します。違いは、メジャーモードフックはメジャーモードを使用するたびに実行されますが、メジャーモードごとに1つのキーマップしかないことです。したがって、キーを繰り返し再定義しても意味がありません。

    参照:https ://stackoverflow.com/a/8139587/903943

  3. このコマンドは数値引数を取るべきではないように見えますが、数値引数を考慮に入れることで、作成する他のコマンドをより柔軟にする方法を知ることは、インタラクティブな仕様を理解する価値があります。

新しい変更についてもう1つ注意してください。

ポイントの周りのスペースをクリアする方法は間違っていませんが、私はこれを行います:

(defun foo ()
  (interactive)
  (skip-chars-forward " ")
  (delete-region (point) (+ (point) (skip-chars-backward " "))))
于 2012-11-23T23:34:59.250 に答える