【发布时间】:2015-08-26 15:23:58
【问题描述】:
我正在尝试编写一个 elisp 函数来缩进该区域或当前行。我的功能是这样的:
(defun shift-text (distance)
(interactive "p")
(if (use-region-p)
(save-excursion
(let ((r-start (region-beginning))
(r-end (region-end)))
(let ((i-start (progn (goto-char r-start) (line-beginning-position)))
(i-end (progn (goto-char r-end) (line-end-position))))
(indent-rigidly i-start i-end distance)
(setq deactivate-mark nil))))
(indent-rigidly (line-beginning-position)
(line-end-position)
distance)))
正常工作。但是,每当我在 use-region-p 返回 true 时尝试撤消缩进时,第一行就不会返回到正确的位置。
我已经看到它既保持在缩进位置,又进一步增加了缩进;对于给定的文本块以一致的方式,但我看不到清晰的模式。例如,这是可能发生的一件事:
;;Initial
Indented
Lines
Of Text
;;After calling function
Indented
Lines
Of Text
;;After undoing
Indented
Lines
Of Text
在此函数之外使用相同的参数调用indent-rigidly 行为正常,所以我认为它一定是我正在做的事情。但是,似乎唯一可以解决的问题是将值硬编码为indent-rigidly。
这是怎么回事?
【问题讨论】:
标签: emacs elisp indentation undo region