Мне не удалось придумать метод проверки синтаксиса без перемещения курсора - например, 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
EDIT: lawlist-kill-word
является незавершенным - любые обновления этой функции будет размещены в тему, связанную с этим вопросом - то есть ,: Emacs: delete whitespaces or a word
Перемещение курсора (на самом деле точка) не является проблемой, если вы заключаете его в 'Спаси excursion'. – Tobias