emacs, Як скопіювати регіон та залишити його виділеним?


9

Я досить задоволений типовим Mw, (kill-ring-save)який втрачає виділення регіону після запуску команди. Я не хочу змінювати його поведінку, але хочу повторно зв’язатись, <C-insert>щоб виконати подібну дію та зберегти виділення регіону.

Я спробував (не) налаштувати transient-mark-modeбезпосередньо і за допомогою функції, але регіон все ще втрачає свою підсвічування.

Запуск лише (kill-ring-save (region-beginning) (region-end))в інтерактивній функції працює так, як очікувалося, тобто. вона втрачає виділення.

Запуск лише (exchange-point-and-mark) (exchange-point-and-mark)в інтерактивній функції працює так, як очікувалося, тобто. він знову виділяє регіон і ставить / залишає крапку в оригінальному / правильному місці.

Однак, коли я ставлю їх разом у функції, це не відзначає регіон. Ось нефункціонуюча функція та обов'язковість:

(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)

Використання: GNU Emacs 23.1.1 в Ubuntu 10.04.3

Відповіді:


8

Запуск kill-ring-saveНЕ деактивувати мітку безпосередньо, а лише встановлює змінну deactivate-markдля tдля того , щоб дезактивація бути зроблена пізніше . Щоб запобігти цьому, перезапустіть deactivate-markйого nil до деактивації.

(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)

0

Регіон виділено, тому що марка є "активною" - тому чітке активізація знака робить трюк. Примітка. Я не зовсім впевнений, чому обмін крапки / позначки не працює. Ось оновлена ​​функція, я також оновив її, щоб використовувати інтерактивну для заповнення аргументів.

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

Дякуємо за покажчики на інтерактивних аргументах activate-mark, але це все ще не працює. Я навіть встановив VM Ubuntu 11.04 з чистим шифером з єдиним кодом, .emacsякий виконує цю функцію, але він все ще не активує позначку, але вручну застосовується C-x C-xодразу після того, як C-insertбуде відновлено підсвічування ...
Peter.O

@fred Ви спробували це в Emacs без / з ваших .emacs? тобто запустіть emacs -qз кодом і перевірте, чи працює він.
Трей Джексон

Я запускав його (безуспішно) без нічого, крім цієї однієї функції в ~/.emacsі без нічого ~/.emacs.d/, і, як згадувалося, також у абсолютно новій установці emacs у абсолютно новій ВМ .... Я зараз спробував цю команду, але це теж не працює: /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))'... Чи працює ця функція для вас?
Пітер.О
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.