Я начинаю с emacs и мало знаю elisp. На самом деле почти ничего.
Я хочу использовать ack вместо grep.
Вот инструкции, которым я следовал, чтобы использовать ack из emacs: http://www.rooijan.za.net/?q=ack_el
Теперь мне не нравится формат вывода, который используется в этом файле el, я бы хотел, чтобы результат был таким же, как у ack --group
.
Итак, я изменил:
(read-string "Ack arguments: " "-i" nil "-i" nil)
to:
(read-string "Ack arguments: " "-i --group" nil "-i --group" nil)
Все идет нормально. Но из-за этого я потерял возможность click-press_enter в строках выходного буфера. В исходном поведении режим компиляции использовался для перехода к выбранной строке.
Я решил, что нужно добавить регулярное выражение в режим подтверждения. Режим подтверждения определяется следующим образом:
(define-compilation-mode ack-mode "Ack"
"Specialization of compilation-mode for use with ack."
nil)
и я хочу добавить регулярное выражение [0-9]+:
, которое также будет обнаруживаться как ошибка, поскольку это то, что включает в себя каждая строка выходного баггера (номер строки).
Я попытался изменить define-compilation-mode
выше, чтобы добавить регулярное выражение, но у меня ничего не вышло.
Как сделать так, чтобы буфер вывода ack
позволял мне щелкать по его строкам?
--- РЕДАКТИРОВАТЬ, я также пробовал: ---
(defvar ack-regexp-alist
'(("[0-9]+:"
2 3))
"Alist that specifies how to match rows in ack output.")
(setq compilation-error-regexp-alist
(append compilation-error-regexp-alist
ack-regexp-alist))
Я где-то украл это и попытался приспособиться к своим потребностям. Не повезло.
--- РЕДАКТИРОВАТЬ, результат после предложения Ивана ---
С обновлением ack.el, чтобы включить:
(defvar ack-regexp-alist
'(("^[0-9]+:" ;; match the line number
nil ;; the file is not found on this line, so assume that it's the same as before
0 ;; The line is the 0'th subexpression (the whole thing)
)
("^[^: ]+$" ;; match a file -- this could be better
0 ;; The file is the 0'th subexpression
))
"Alist that specifies how to match rows in ack output.")
(setq compilation-error-regexp-alist
(append compilation-error-regexp-alist
ack-regexp-alist))
(define-compilation-mode ack-mode "Ack"
"Specialization of compilation-mode for use with ack."
nil)
Затем, проверяя переменную compilation-error-regext-alist
, я получаю значение:
(absoft ada aix ant bash borland caml comma edg-1 edg-2 epc ftnchek iar ibm irix java jikes-file jikes-line gnu gcc-include lcc makepp mips-1 mips-2 msft oracle perl rxp sparc-pascal-file sparc-pascal-line sparc-pascal-example sun sun-ada 4bsd gcov-file gcov-header gcov-nomark gcov-called-line gcov-never-called
("^[0-9]+:" nil 0)
("^[^: ]+$" 0))
Я нахожу формат переменной очень странным, не так ли? Я не знаю elisp (пока), так что, возможно, это правильно.
По-прежнему нет ссылок или цвета в буфере * ack *.