Pergunta

Eu quero acessar o conteúdo da região atual como uma string dentro de uma função. Por exemplo:

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

Graças

Ed

Foi útil?

Solução

buffer-substring juntamente com region-beginning e region-end pode fazer isso.

Outras dicas

Como starblue diz, (buffer-substring (mark) (point)) retorna o conteúdo da região, se a marca está definido. Se você não quer que o propriedades de cadeia , você pode usar a variante 'buffer-substring-no-properties.

No entanto, se você está escrevendo um comando interativo, há uma maneira melhor para obter os pontos finais da região, utilizando o formulário (interactive "r"). Aqui está um exemplo de 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)))

Quando chamado a partir do código Lisp, a forma (interactive ...) é ignorado, assim você pode usar esta função para contar as linhas em qualquer parte do buffer, não apenas a região, passando os argumentos apropriados: por exemplo, (count-lines-region (point-min) (point-max)) para contar as linhas na parte estreitada do tampão. Mas quando chamado de forma interativa, a forma (interactive ...) é avaliada, e os suprimentos de código "r" o ponto ea marca, como dois argumentos numéricos, ascendente.

Veja as Emacs Lisp manuais, seções 21.2.1 Usando Interactive e 21.2.2 caracteres de código para interativo.

Se você quiser copiar o conteúdo região em um código Lisp para uma estrutura de dados acessível ao usuário como kill-anel, X prancheta ou registar-se, manual Emacs Lisp recomenda a utilização filter-buffer-substring em vez de simplesmente buffer-substring. Antes de copiar, a função se aplica funções de filtro a partir de uma variável de lista denominada filter-buffer-substring-functions . A função foi adicionado na versão 22.3 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top