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

9

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

Eu tentei (des) configurar transient-mark-modediretamente e através de uma função, mas a região ainda perde seu destaque.

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

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

No entanto, quando eu colocá-los todos juntos em uma função, ele não re-destacar a região. Aqui está a função que não funciona e a ligação:

(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

Peter.O
fonte

Respostas:

8

Correndo kill-ring-savenão desativa a marca diretamente, mas apenas define a variável deactivate-markque t, para que a desativação de ser feito mais tarde . Para evitar isso, redefina deactivate-markpara 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)
yibe
fonte
0

A região é destacada porque a marca está "ativa" - ativando expressamente a marca faz o truque. Nota: Não sei ao certo por que a troca do ponto / marca não funciona. Aqui está uma função atualizada, eu também a 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))
Trey Jackson
fonte
Obrigado pelos ponteiros nos argumentos interativos e activate-mark, mas ainda não funciona. Eu até instalei uma VM limpa do slate do Ubuntu 11.04 com o único código .emacsdessa função, mas ainda não ativa a marca, mas a aplicação manual C-x C-ximediatamente após C-inserta restauração do realce ...
Peter.O
@fred você já tentou isso em um Emacs sem seu .emacs? ou seja, execute emacs -qo código e verifique se funciona.
Trey Jackson
Eu o executei (sem êxito) sem nada, exceto essa função ~/.emacse sem nada ~/.emacs.d/, e, como mencionado, também em uma instalação totalmente nova do emacs em uma nova VM ... Eu já tentei esse comando, mas também não funciona: /usr/bin/emacs --no-init-file --no-site-file --eval '(defun kill-ring-save-keep-highlight (beg end) (interactive "r") (kill-ring-save beg end) (activate-mark))'... A função funciona para você?
precisa saber é o seguinte