Как мне получить доступ к содержимому текущего региона в Emacs Lisp?

StackOverflow https://stackoverflow.com/questions/605846

  •  03-07-2019
  •  | 
  •  

Вопрос

Я хочу получить доступ к содержимому текущего региона в виде строки внутри функции.Например:

(concat "stringa" (get-region-as-string) "stringb")

Спасибо

Эд

Это было полезно?

Решение

buffer-substring вместе с region-beginning и region-end могу это сделать.

Другие советы

Как говорит Старблу, (buffer-substring (mark) (point)) возвращает содержимое региона, если отметка установлена.Если вы не хотите свойства строки, вы можете использовать 'buffer-substring-no-properties вариант.

Однако, если вы пишете интерактивный есть лучший способ получить конечные точки региона, используя форму (interactive "r").Вот пример из simple.el:

(defun count-lines-region (start end)
  "Print number of lines and characters in the region."
  (interactive "r")
  (message "Region has %d lines, %d characters"
       (count-lines start end) (- end start)))

При вызове из кода Lisp (interactive ...) форма игнорируется, поэтому вы можете использовать эту функцию для подсчета строк в любой часть буфера, а не только регион, передав соответствующие аргументы:например, (count-lines-region (point-min) (point-max)) для подсчета строк в суженной части буфера.Но при интерактивном вызове (interactive ...) форма оценивается, и "r" code предоставляет точку и метку в виде двух числовых аргументов, начиная с наименьшего.

См. Руководство по Emacs Lisp, разделы 21.2.1 Использование интерактивного режима и 21.2.2 Символы кода для интерактивного.

Если вы хотите скопировать содержимое региона в коде Lisp в доступную пользователю структуру данных, такую ​​как kill-ring, X-буфер обмена или регистр, руководство Emacs Lisp рекомендует использовать filter-buffer-substring вместо просто buffer-substring.Перед копированием функция применяет функции фильтра из переменной списка с именем filter-buffer-substring-functions.Функция была добавлено в версии 22.3.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top