在函数调用成功时结束函数,或评估函数

End function on successful function call, or evaluate for function

我为标题道歉。

我有控制流问题。我只想调用两个函数之一。我将对两者的调用都放在另一个函数中。如果我可以评估任何一个的价值,那么我可以根据该价值调用或不调用下一个;如果有一个 return 值与每个调用关联,基于他们是否实际做了某事,它可以在条件分支中使用。或者,如果我知道克拉前面的字符的值,它可以作为函数的参数。

我不知道如何找到这些值。

我的实际代码几乎是最简单的情况。具体如下:

(defun rad-delete-backward-char-indent ()
    "Delete one character or up to indent's worth of white space"
    (interactive)
    (delete-horizontal-space 4)
    (delete-backward-char))   

(global-set-key "\d" 'rad-delete-backward-char-indent)

我想删除一个字符,或所有前面的 white-space 最多四个空格。目前,我最多删除四个 white-space 和一个字符。即

"foo___^" << "fo^"

相对于:

"foo___" << "foo^"

德鲁回答了基本问题。我使用的解决方案是使用 preceding-char 通用函数评估指向指针的前一个字符。

(defun rad-delete-backward-char-indent ()
    "Delete one character or up to one tab worth of white space"
    (interactive)
    (setq first_char (string (preceding-char)))
    (setq i 0)                
    (while (not (= i 4))
        (if (string= " " (string (preceding-char)))
            (delete-backward-char 1))
        (setq i (1+ i)))
    (unless (string= " " first_char)
        (delete-backward-char 1)))

(global-set-key "\d" 'rad-delete-backward-char-indent)
(defun rad-delete-backward-char-indent ()
  "Delete one character or up to indent's worth of white space"
  (interactive)
  (if <SOMETHING>
      (delete-horizontal-space 4)
    (delete-backward-char))

但是不清楚你要测试的<SOMETHING>是什么

你说“如果我可以评估任何一个的价值,那么我可以根据那个价值调用或不调用下一个。”我不明白那句话。你能换一种说法吗?您想测试什么,知道要评估哪些代码? 求值是什么意思?

虽然我认为 Drew 的答案是您更好的选择,但另一个可能更接近您想要的解决方案是检查第一个函数是否改变了什么:

(defun rad-delete-backward-char-indent ()
  "Delete one character or up to indent's worth of white space"
  (interactive)
  (let ((start (buffer-chars-modified-tick)))
    (delete-horizontal-space 4)
    (when (eq (buffer-chars-modified-tick) start)
      (delete-backward-char))))

顺便说一句,我不认为上面的 4 符合您的要求。它与任何其他非零值的作用相同:它告诉 delete-horizontal-space 只向后删除,但它不限制它将删除的空格数。