Я начинаю изучать Emacs Lisp, и в качестве первого проекта я хотел бы улучшить режим fortran в Emacs. Я хотел бы отметить имя подпрограммы в буфере, а затем нажать комбинацию клавиш. Поднять буфер со всеми строками в указанном источнике, где указано имя подпрограммы.Выделите имя во всем буфере Emacs
я обнаружил, что я могу получить выделенный текст с помощью:
(defun get-selected-text (beg end)
(interactive
(if (use-region-p)
(list (region-beginning) (region-end))
(list nil nil)))
(message "%s" (if (and beg end)
(buffer-substring-no-properties beg end) "")))
и может хранить номера строк из подпрограмм с помощью:
(defun get-line-numbers (str)
(interactive "sEnter string: ")
(save-excursion
(goto-char 0)
(let ((sok 1) (list nil) pp)
(while sok
(setq pp (search-forward str nil t))
(if pp (push (line-number-at-pos pp) list)
(setq sok nil)))
(message "%s" list))))
Теперь я хотел бы, чтобы открыть новый буфер подобный когда я использую Ctrl-x Ctrl-b, чтобы выполнить list-buffers
, а затем отобразить каждый номер строки вместе с текстом на линии, и пользователь может выбрать данную строку и нажать . Введите, чтобы перейти к данной строке в исходном буфере.
Итак, вы переустанавливаете 'происшествие'? –
Спасибо, что сообщили мне. Я проверю информацию о режиме Emacs 'execute'. Он выглядит очень многообещающим, может быть, я откажусь от своего проекта, если я получу режим выполнения. –
Emacs - это старый интерпретатор lisp, который используется многими программистами как редактор. Таким образом, очень сложно найти общую полезную функцию, которая еще не реализована. Имея это в виду, мой ответ ниже следует понимать как упражнение по программированию - и только как таковое. Тем не менее, стать лизром имеет свои большие преимущества, если вам нужны ваши особые функции, которых нет в emacs и, конечно же, ни в одном другом редакторе. – Tobias