函数中的严格缩进不会撤消
indent-rigidly in function won't undo
我正在尝试编写一个 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
return 为真时,每当我尝试撤消缩进时,第一行都不会 return 到正确的位置。
我看到它既保持缩进位置,又进一步增加缩进;对于给定的文本块以一致的方式,但我看不到清晰的模式。因此,例如,这是可能发生的一件事:
;;Initial
Indented
Lines
Of Text
;;After calling function
Indented
Lines
Of Text
;;After undoing
Indented
Lines
Of Text
在此函数之外使用相同的参数调用 indent-rigidly
行为正常,因此我认为这一定是我正在做的事情。然而,唯一似乎可以解决的问题是将值硬编码为 indent-rigidly
。
这是怎么回事?
撤消适用于该区域,该区域在 运行 您的功能后对我来说仍然有效。如果我 select 整行(在尝试撤消之前,或者首先在 运行 之前),或者停用标记,撤消对我来说是正确的,至少对于你的测试用例是这样。
最好的办法是调用 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) {
}
我正在尝试编写一个 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
return 为真时,每当我尝试撤消缩进时,第一行都不会 return 到正确的位置。
我看到它既保持缩进位置,又进一步增加缩进;对于给定的文本块以一致的方式,但我看不到清晰的模式。因此,例如,这是可能发生的一件事:
;;Initial
Indented
Lines
Of Text
;;After calling function
Indented
Lines
Of Text
;;After undoing
Indented
Lines
Of Text
在此函数之外使用相同的参数调用 indent-rigidly
行为正常,因此我认为这一定是我正在做的事情。然而,唯一似乎可以解决的问题是将值硬编码为 indent-rigidly
。
这是怎么回事?
撤消适用于该区域,该区域在 运行 您的功能后对我来说仍然有效。如果我 select 整行(在尝试撤消之前,或者首先在 运行 之前),或者停用标记,撤消对我来说是正确的,至少对于你的测试用例是这样。
最好的办法是调用 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) {
}