Как настроить режим удаления-выбора только для удаления?

Я использую GNU Emacs 22.3.1 в Windows.

В моем Emacs я включил delete-selection-mode, и очень удобно выбирать регион и удалять или заменять его. Но у меня есть недостаток.

Когда я пишу или нажимаю DEL над выделенным фрагментом, Emacs не только удаляет текст, но и уничтожает (то есть отправляет в буфер обмена*). Меня это очень раздражает, потому что я не контролирую свой список убийств (также известный как буфер обмена) и могу вызвать неожиданные эффекты.

Есть способ, что delete-selection-mode не убивает текст, а просто удаляет? Возможно, изменить исходный код?

(*: я синхронизировал kill-ring и буфер обмена Windows, поэтому для меня (для практических целей) это одно и то же)


Изменить [24 июня 2009 г.]

Спасибо, Даниэльпо. Даже с идеей Трея Джексона выбор все еще убивает. И я нашел причину.

Я обнаружил, что проблема была не в delete-selection-mode. Проблема в том, что когда я выбирал регион, то делал это мышкой. И никогда бы не подумал, что это мышь копирует текст. Используя команду set-mark и клавиши со стрелками, текст, наконец, не уничтожается, а только удаляется.

Я отключил это поведение, написав это в своем .emacs:

(require 'delsel)
(setq mouse-drag-copy-region nil)
(global-unset-key (kbd "<mouse-2>"))
(global-unset-key (kbd "<mouse-3>"))

Спасибо за совет. Если этот метод отключения этого поведения мыши может вызвать конфликты с другими параметрами, пожалуйста, прокомментируйте.


person Community    schedule 24.06.2009    source источник
comment
Ааа, хороший улов, я не подумал об этом, и я использую эту функцию довольно часто. Можно так быстро копировать и вставлять :) Но я понимаю, что это может конфликтовать с рабочими привычками...   -  person danielpoe    schedule 30.06.2009
comment
Опубликуйте свое решение на свой вопрос в качестве ответа, а затем примите его. Это не позволит людям читать этот старый пост, пытаясь ответить на нерешенные вопросы.   -  person Drew    schedule 20.07.2014


Ответы (2)


Вы пытались начать emacs с -Q. Если я сделаю это и включу только M-x: delete-selection-mode, я не смогу воспроизвести то, что вы описываете. Ничего не убивается только удаляется?! Вы можете проверить?

person danielpoe    schedule 24.06.2009

Похоже, вам просто нужно изменить небольшую часть исходного кода, а именно внести это изменение:

(defun delete-active-region (&optional killp)
  (delete-region (point) (mark))
  t)

Исходный код смотрел на аргумент killp и использовал его, чтобы решить, добавлять ли регион в список уничтожений, а вы сказали, что никогда не захотите этого. Это изменение заставляет регион всегда удаляться.

Теперь вам не нужно на самом деле изменять исходный код, просто поместите определение этой функции после (require 'delsel) в вашем .emacs (или после (delete-selection-mode)).

person Trey Jackson    schedule 24.06.2009