Как настроить режим удаления-выбора только для удаления? - PullRequest
0 голосов
/ 24 июня 2009

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

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

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

Есть способ, которым 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>"))

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

Ответы [ 2 ]

0 голосов
/ 24 июня 2009

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

0 голосов
/ 24 июня 2009

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

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

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

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

...