2

いくつかのVimエミュレーション機能に取り組んでいるときに、次のコードを思いつきました。

;続いてを押すReturnと、カーソルが行の終わりにジャンプし、セミコロンを挿入します。

(global-set-key (kbd ";") 'insert-or-append)

(defun insert-or-append ()
  "If the user enters <return>, then jump to end of line and append a semicolon,
   otherwise insert user input at the position of the cursor"
  (interactive)
  (let ((char-read (read-char-exclusive))
        (trigger ";"))
    (if (eql ?\r char-read)
        (progn
          (end-of-line)
          (insert trigger))
      (insert (this-command-keys)))))

この関数は正常に機能しますが、すべてがハードコーディングされています。もっと一般的にしたいと思います。(kbd "<return>")理想的には、引数としてkbd-macro(たとえば)を指定し、それを。の結果と比較したいと思います(read-char)。ただし、kbdはシンボルを(read-char)返し、文字コードを返します。Emacsのドキュメントを調べてきましたが、変換を見つけることができませんでした。

2つを比較する方法はありますか?または、より簡単なアプローチはありますか?

4

1 に答える 1

4

これはどうですか:

(global-set-key (kbd "RET") 'electric-inline-comment)

(defun electric-inline-comment ()
  (interactive "*")
  (if (and (eq last-command 'self-insert-command)
           (looking-back ";"))
      (progn
        (delete-region (match-beginning 0) (match-end 0))
        (end-of-line)
        (insert ";"))
    (newline)))
于 2012-08-15T10:43:18.780 に答える