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

时间:2017-10-22 17:39:51

标签: emacs elisp

我为标题道歉。

我有控制流问题。我想称之为两个功能中的一个。我把调用放在另一个函数里面。如果我可以评估任何一个值,那么我可以根据该值调用或不调用下一个值;如果有一个与每个调用相关的返回值,基于它们是否实际执行了某些操作,它可以在条件分支中使用。或者,如果我知道克拉前面的字符的值,那么它可以作为函数的参数。

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

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

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

我想删除一个字符,或者删除所有前面的空格,最多四个空格值。目前,我正在删除最多四个空格和一个字符。即。

  

"富___ ^" << " FO ^"

相反:

  

"富___" << "富^"

德鲁回答了基本问题。我使用的解决方案是使用前置字符泛型函数来评估指针的前一个字符。

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

2 个答案:

答案 0 :(得分:1)

(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>是什么。

你说“如果我可以评估任何一个值,那么我可以根据该值调用或不调用下一个。”我不明白那个句子。你能用另一种方式说出来吗?你想测试什么,知道要评估哪些代码? 评估任何一个值是什么意思?

答案 1 :(得分:0)

虽然我认为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仅向后删除,但它不会限制它将删除的空格数。