Как говорит starblue, (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)))
При вызове из кода на Лиспе форма (interactive ...)
игнорируется, поэтому вы можете использовать эту функцию для подсчета строк в любой части буфера, а не только в области, путем передачи соответствующих аргументов : например, (count-lines-region (point-min) (point-max))
для подсчета строк в суженной части буфера. Но при интерактивном вызове форма (interactive ...)
оценивается, а код "r"
предоставляет точку и метку в виде двух числовых аргументов, наименьший из первых.
См. Руководство по Emacs Lisp, разделы 21.2.1 Использование интерактивных и 21.2.2 Кодовые символы для интерактивных .