Как программно получить область (выделение) в Emacs Lisp?

Мне нужно получить доступ к выделению в буфере Emacs. Я нашел эту статью Как получить доступ к содержимому текущего региона в Emacs Lisp? и это мне очень помогает.

Но есть проблема. В первый раз, когда я выбираю (выделяю) регион, он работает нормально, но когда я нажимаю Cg и обычно перемещаю курсор в другое место, не выделяя никаких символов, я получаю строку от последней метки до текущей точки, в то время как я ожидаю пустой .

На самом деле мне нужно реализовать функцию, которая будет возвращать текущий выбор (выделенный) в виде строки или пустой строки, если ничего не выделено. Следующий код может выразить меня более ясно.


(defun get-search-term ()
  (interactive)
  (let (
        (selection (buffer-substring-no-properties (region-beginning) (region-end))))
    (if (= (length selection) 0)
        (message "empty string")
      (message selection))))

Есть предложения? Большое спасибо!

21
задан ideasman42 14 August 2017 в 04:51
поделиться