emacs, Como copiar a região e deixá-la realçada?

9

Estou feliz o suficiente com o padrão M-w como (kill-ring-save) , que perde o destaque da região ao executar o comando. Não quero alterar seu comportamento, mas desejo vincular <C-insert> para executar uma ação semelhante e manter o realce da região.

Eu tentei (un) definir transient-mark-mode diretamente e por meio de uma função, mas a região ainda perde seu destaque.

A execução apenas de (kill-ring-save (region-beginning) (region-end)) em uma função interativa funciona como esperado, ou seja. perde destaque.

A execução apenas de (exchange-point-and-mark) (exchange-point-and-mark) em uma função interativa funciona como esperado, ou seja. Ele realça novamente a região e coloca / deixa o ponto em seu lugar original / correto.

No entanto, quando eu os coloco todos juntos em uma função, ele não realça novamente a região. Aqui está a função e ligação não funcionais:

(defun kill-ring-save-keep-highlight ()
  (interactive)
  (kill-ring-save (region-beginning) (region-end))
  (exchange-point-and-mark) (exchange-point-and-mark)
)
(global-unset-key (kbd "<C-insert>"))
(global-set-key   (kbd "<C-insert>") 'kill-ring-save-keep-highlight)

Usando: GNU Emacs 23.1.1 no Ubuntu 10.04.3

    
por Peter.O 16.09.2011 / 10:04

2 respostas

8

A execução de kill-ring-save não desativa a marca diretamente, mas apenas define a variável deactivate-mark to t para que a desativação seja feita depois . Para evitar isso, redefina deactivate-mark para nil antes da desativação.

(defun kill-ring-save-keep-highlight (beg end)
  "Keep the region active after the kill"
  (interactive "r")
  (prog1 (kill-ring-save beg end)
    (setq deactivate-mark nil)))

(global-set-key (kbd "<C-insert>") 'kill-ring-save-keep-highlight)
    
por 17.09.2011 / 11:15
0

A região é destacada porque a marca está "ativa" - ativando de forma expressiva a marca faz o truque. Nota: Não sei ao certo por que trocar o ponto / marca não funciona. Aqui está uma função atualizada, eu também atualizei para usar interativo para preencher os argumentos.

(defun kill-ring-save-keep-highlight (beg end)
  "Keep the region active after the kill"
  (interactive "r")
  (kill-ring-save beg end)
  (activate-mark))
    
por 16.09.2011 / 19:34

Tags