1. "Умные" Home и End
(global-set-key (kbd "<home>") (lambda ()
"Smart Home"
(interactive)
(if (equal (point) (line-beginning-position))
(progn
(previous-line)
(skip-chars-forward "[:space:]"))
(beginning-of-line))))
(global-set-key (kbd "<end>") (lambda ()
"Smart End"
(interactive)
(if (equal (point) (line-end-position))
(progn
(next-line)
(end-of-line))
(end-of-line))))
2. Расширить выделение до семантической единицы и скопировать выделенное
(defun expand-selection ()
"Expand selection of semantic unit. v.0.2"
(interactive)
(unhighlight-regexp t) ;; убираем всю предыдущую посветку
(let ((chrs "a-zA-Z0-9а-яА-Я-_%:~\.\/\*\?\&")
(endc (string (char-after (region-end)))) p1 p2)
(if (region-active-p)
(setq chrs (concat chrs "\s\"")))
(skip-chars-backward chrs)
(setq p1 (point))
(skip-chars-forward chrs)
(setq p2 (point))
(kill-ring-save p1 p2)
(highlight-regexp (buffer-substring-no-properties p1 p2))))
Алгоритм следующий:
- если выделения нет, то выделить "токен", содержащий символы из chrs
- если часть токена уже выделена, то выделить все, что попадает в chrs c пробелами ("выделить фразу")
Отправить комментарий