суббота, 12 декабря 2015 г.

Улучшаем навигацию (по коду)

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 пробелами ("выделить фразу")



0 коммент. :

Отправить комментарий

Следующее Предыдущее Главная страница

Blogger Template by Blogcrowds