我正在尝试在Emacs中创建一个主要模式。在此模式下,Tab 键应按如下方式工作:
- 我定义一个数字,例如
(setq my-tab-stop 10)
- 当我按 Tab 键时,该点移动到可被
my-tab-stop
整除的下一列,即 - 如果
current-column
等于 0,1,2,..,9,则该点应移至第 10 列, - 如果
current-column
等于 10,11,12,..,19,则该点应移动到第 20 列,依此类推。
注意:不应插入空格或制表符(如tab-to-tab-stop
),只有点移动,但是,如果点移动超过当前行的长度,则应插入空格以使行更长)
如何做到这一点?
这是代码:
(defvar tabtab-val 10)
(defun tabtab/forward-char (n)
(let ((space (- (line-end-position) (point))))
(if (> space tabtab-val)
(forward-char n)
(move-end-of-line 1)
(insert (make-string (- n space) ? )))))
(defun tabtab ()
(interactive)
(let ((shift (mod (current-column) tabtab-val)))
(tabtab/forward-char (- tabtab-val shift))))
只需将密钥绑定到move-to-tab-stop
即可。
您可以使用以下命令轻松配置固定间隔 N 列的制表位表:
(setq tab-stop-list (number-sequence N MAX N))