Hành vi bình thường của Emacs khi chế độ đánh dấu tạm thời được kích hoạt là khi bạn thực hiện lựa chọn thay đổi, thì nếu lệnh tiếp theo là một chuyển động không thay đổi, nhãn hiệu sẽ bị hủy kích hoạt. Ví dụ, sau các lệnh M-l
(để đánh dấu dòng hiện tại bằng hàm bên dưới) và C-f
, dấu bị hủy kích hoạt. Làm thế nào để mô phỏng hành vi đó từ elisp sau (set-mark-command nil)
?
Ví dụ:
(defun my-mark-current-line ()
(interactive)
(beginning-of-line)
(set-mark-command nil)
(end-of-line)
(forward-char))
(global-set-key (kbd "M-l") 'my-mark-current-line)
Bây giờ làm Ml Cf và khu vực sẽ phát triển, nhưng thay vào đó, tôi muốn hành vi mặc định, tức là khu vực sẽ hủy kích hoạt khi Cf và phát triển với CSf.
EDIT : nên sử dụng một chức năng khác với lệnh set-mark-lệnh cho phép điều này? Tôi không thể tìm thấy bất kỳ.
C-f
sẽ áp dụng cho tất cả các lệnh điều hướng khác mà bạn sử dụng.
C-f
sau M-l
không mở rộng vùng vì không có vùng hoạt động ở cuối M-l
(được ràng buộc downcase-word
theo mặc định).
M-l
OP được gọi không phải là ràng buộc mặc định ( downcase-word
), mà là ràng buộc tùy chỉnh củamy-mark-current-line
C-S-f
tương tự nhưC-SPC
(kích hoạt một vùng) +C-f
(điều hướng). Bạn có thể có thể có được những gì bạn muốn bằng cách liên kếtC-f
với một hàm bao bọc trước tiên sẽ hủy kích hoạt một vùng nếu hoạt động và sau đó tiến hành thực hiện những gìC-f
does (forward-char
); và liên kếtC-S-f
trực tiếp vớiforward-char
. Lưu ý rằng nếu bạn từng sử dụng emacs trong chế độ thiết bị đầu cuối,C-f
vàC-S-f
cả hai sẽ hoạt động nhưC-f
thiết bị đầu cuối không thể phân biệt giữa hai.