emacs, Làm thế nào để sao chép vùng và để nó được tô sáng?


9

Tôi đủ hạnh phúc với Mw mặc định khi (kill-ring-save)mất phần tô sáng của vùng khi chạy lệnh. Tôi không muốn thay đổi hành vi của nó, nhưng tôi muốn liên kết <C-insert>lại để thực hiện một hành động tương tự và duy trì sự nổi bật của khu vực.

Tôi đã thử (un) cài đặt transient-mark-modetrực tiếp và thông qua một chức năng, nhưng khu vực vẫn mất điểm nhấn.

Chỉ chạy (kill-ring-save (region-beginning) (region-end))trong một chức năng tương tác hoạt động như mong đợi, tức là. nó làm mất đi sự nổi bật

Chỉ chạy (exchange-point-and-mark) (exchange-point-and-mark)trong một chức năng tương tác hoạt động như mong đợi, tức là. nó làm nổi bật lại khu vực và đặt / lá điểm vào vị trí ban đầu / chính xác của nó.

Tuy nhiên, khi tôi đặt tất cả chúng lại với nhau trong một hàm, nó không làm nổi bật lại vùng đó. Đây là chức năng không ràng buộc và ràng buộc:

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

Sử dụng: GNU Emacs 23.1.1 trong Ubuntu 10.04.3

Câu trả lời:


8

Chạy kill-ring-savekhông hủy kích hoạt nhãn hiệu trực tiếp mà chỉ đặt biến deactivate-markthành tđể hủy kích hoạt được thực hiện sau đó . Để ngăn chặn điều này, hãy đặt lại deactivate-markvề nil trước khi hủy kích hoạt.

(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

Vùng được tô sáng vì nhãn hiệu là "hoạt động" - vì vậy kích hoạt rõ ràng nhãn hiệu đó là mẹo. Lưu ý: Tôi không chắc chắn tại sao việc trao đổi điểm / nhãn hiệu không hoạt động. Đây là một chức năng được cập nhật, tôi cũng cập nhật nó để sử dụng tương tác để điền vào các đối số.

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

Cảm ơn các gợi ý về các đối số tương tác và activate-mark, nhưng nó vẫn không hoạt động. Tôi thậm chí đã cài đặt một máy ảo sạch của Ubuntu 11.04 với mã duy nhất .emacslà chức năng này, nhưng nó vẫn không kích hoạt nhãn hiệu, nhưng vẫn áp dụng thủ công C-x C-xngay sau khi C-insertkhôi phục lại phần tô sáng ...
Peter.O

@fred bạn đã thử nó trong Emacs w / out .emacs của bạn chưa? tức là chạy emacs -qvới mã và kiểm tra xem nó có hoạt động không.
Trey Jackson

Tôi đã chạy nó (không thành công) mà không có bất cứ thứ gì ngoại trừ chức năng này trong ~/.emacsvà không có bất cứ thứ gì trong ~/.emacs.d/, và như đã đề cập, trong một bản cài đặt hoàn toàn mới của emacs trong một máy ảo hoàn toàn mới .... Bây giờ tôi đã thử lệnh này, nhưng nó cũng không hoạt động: /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))'... Chức năng có hoạt động không?
Peter.O
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.