1) Зачем было давать в elisp другие имена функциям имеющим сходное поведение в CL??
2) Не нашел аналога функции position из CL пришлось писать свой велосипед
3) Удаление элемента из списка. В доке по elisp сказано буквально следующее
— Function: delete object sequence
If sequence is a list, this function destructively removes all
elements equal to object from sequence. For lists, delete is to
delq as member is to memq: it uses equal to compare elements with
object, like member; when it finds an element that matches, it
cuts the element out just as delq would.
оказалось она ни разу не деструктивная.
В результате получилось следующее. Предыдущий вариант можно посмотреть в более ранних постах.
(defvar*highlited* '())
(defunmy-extract-word ()
(interactive)
(let((start 0)
(end 0))
(backward-word 1)
(setq start (point))
(forward-word 1)
(setq end (point))
(buffer-substring start end)))
(defun find-highlited (param)
(let((i 0)
(retindex -1))
(while (< i (length *highlited*))
(if (string= (elt *highlited* i) param)
(setq retindex i))
(setq i (+ i 1)))
retindex))
(defun my-highlight-phrase ()
(interactive)
(let ((curr-word (my-extract-word)))
(if (>= (find-highlited curr-word) 0)
(progn (unhighlight-regexp
(elt *highlited* (find-highlited curr-word)))
(setq *highlited* (delete curr-word *highlited*)))
(progn (highlight-regexp (my-extract-word) 'hi-yellow)
(add-to-list '*highlited* curr-word)))))
Комментариев нет:
Отправить комментарий