我一直无法想出一种方法来测试语法条件而不移动游标-例如,skip-syntax-forward和skip-chars-forward都移动游标以返回t或正值。如何在不移动光标的情况下返回t或nil?
(defun lawlist-kill-word ()
"Mark word / symbol + whitespace to the right of the cursor, and kill same."
(interactive)
(let* (
(symbol-regexp "\\s.\\|\\s_")
(word-regexp "\\sw"))
(modify-syntax-entry ?' "_") ;; apostrophe = symbol constituent
(cond
((< 0 (skip-syntax-forward "_."))
(let ((end (point)))
(set-mark end)
(while (looking-back symbol-regexp)
(backward-char))
(let ((beg (point)))
(delete-region beg end)
(setq beg (point))
(cond
((skip-chars-forward " \t")
(setq end (point))
(set-mark end)
(delete-region beg end))))))
((< 0 (skip-syntax-forward "w"))
(let ((end (point)))
(set-mark end)
(while (looking-back word-regexp)
(backward-char))
(let ((beg (point)))
(delete-region beg end)
(setq beg (point))
(cond
((skip-chars-forward " \t")
(setq end (point))
(set-mark end)
(delete-region beg end))))))
(t
(let ((beg (point)))
(set-mark beg)
(skip-chars-forward " \t")
(let ((end (point)))
(delete-region beg end)))
(deactivate-mark)))
(modify-syntax-entry ?' "w") )) ;; apostrophe = word constituent编辑:lawlist-kill-word是一项正在进行的工作--对该函数的任何更新都将发布到与该问题相关的线程中,即:Emacs: delete whitespaces or a word。
发布于 2013-12-07 21:01:20
正如@Tobias所说:在save-excursion中包装光标移动。将您想要的任何值(例如(point))保存在变量中,并根据需要返回它们。
例如,如果您想要前面的位置有四行,请执行如下操作:
(let ((posn (save-excursion (forward-line 4) (point))))
posn)https://stackoverflow.com/questions/20444541
复制相似问题