将点移动到Emacs中的下一个制表位

时间:2013-11-02 11:29:00

标签: emacs tabs elisp

我正在尝试在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中所示),只有点移动,但是,如果点移动超出当前行的长度,则应插入空格以使行更长)

如何做到这一点?

2 个答案:

答案 0 :(得分:1)

以下是代码:

(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))))

答案 1 :(得分:0)

只需将密钥绑定到move-to-tab-stop

您可以通过以下方式轻松配置N列固定间隔的制表位列表:

(setq tab-stop-list (number-sequence N MAX N))