2013-12-07 3 views
1

Мне не удалось придумать метод проверки синтаксиса без перемещения курсора - например, 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

+2

Перемещение курсора (на самом деле точка) не является проблемой, если вы заключаете его в 'Спаси excursion'. – Tobias

ответ

2

Как @Tobias сказал: переместите движения курсора в save-excursion. Сохраните любые значения, которые вы хотите (например, (point)), в переменных и возвращаете их по мере необходимости.

НАПРИМЕР, если вы хотите позицию четыре линии вперед, сделать что-то вроде этого:

(let ((posn (save-excursion (forward-line 4) (point)))) 
    posn) 
+0

Большое спасибо и спасибо @Tobias - очень благодарен !!! – lawlist

Смежные вопросы