我是 Emacs 的新手。
我正在尝试编写一个适用于所有模式的 elisp 函数。具体来说,我想编写一个插入大括号(有点像insert-parentheses
)的函数,就像下面的键序列对只支持自动缩进的哑编辑器所做的一样:
"{" <ret> "}" <up-arrow> <end> <ret> <tab>
此键序列适用于 Java 和 C# (bsd) 样式的缩进。我需要它在所有大括号-y emacs 模式以及纯文本文件中工作 - 我有其他没有 emacs 模式但仍使用大括号的格式。
这是我的第 12 次尝试:
(defun insert-braces-macro ()
(interactive)
(insert "{")
(newline)
(indent-relative t)
(insert "}")
(forward-line -1)
(end-of-line)
(newline)
(indent-relative t)
(indent-relative nil))
不幸的是,这并不完全正确。我认为indent-relative
这不是正确的函数,因为它在 Java 样式中没有正确缩进:
f |
扩展为:
f {
|
}
在 C 模式下:
somelongword another |
扩展为:
somelongword another {
|
}
但indent-according-to-mode
也不对,因为它会在 C-ish 模式下缩进太多(尾随的 '}' 是缩进的),而在基本模式下根本不会。
处理这个问题的正确方法是什么?