函数中的缩进不会撤消

时间:2015-08-26 15:23:58

标签: emacs elisp indentation undo region

我正在尝试编写一个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的值进行硬编码。 这是怎么回事?

1 个答案:

答案 0 :(得分:0)

最好的方法是拨打indent-rigidly,然后从新线开始:

#' My function. Does stuff with numbers.
#'
#' This takes an input `x` and does something with it.
#' @param x a number.
myFunction <- function (x) {
}