нажав на Emacs сдувает x выбор - PullRequest
1 голос
/ 15 июля 2011

В большинстве случаев, когда я щелкаю мышью по окну emacs, выделение x, которое я надеюсь вставить в буфер, сдувается. Кажется, это вызвано небольшим смещением руки, когда я нажимаю левую кнопку мыши, вызывая неосторожное «перетаскивание». Я не верю, что смогу избавиться от этой конкретной привычки.

Одно решение, которое я нашел, чтобы предотвратить это, это установить:

(setq mouse-drag-copy-region nil)

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

Я пишу на Centos 5.x + GNOME 2 с GNU emacs 23.3.1 на случай, если это что-то изменит.

Похоже, это проблема GTK / X; Я могу производить подобное поведение с другими приложениями.

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Самым простым решением этого является изменение функции mouse-drag-track, которую можно найти в mouse.el.Чтобы найти определение функции, Mx find-function mouse-drag-track RET .

Скопируйте его в файл .emacs и внесите одно небольшое изменение.Найдите оператор and, который выглядит следующим образом:

(and mouse-drag-copy-region
     do-mouse-drag-region-post-process
     (let (deactivate-mark)
       (copy-region-as-kill region-commencement
                            region-termination)))

И измените его так, чтобы проверка включала не менее 2 символов.Я сделал эту проверку для 10 символов, чтобы упростить тестирование:

(and mouse-drag-copy-region
     (>= (abs (- region-commencement region-termination)) 10) ;; THIS IS NEW
     do-mouse-drag-region-post-process
     (let (deactivate-mark)
       (copy-region-as-kill region-commencement
                            region-termination)))

Я не вижу чистого способа сделать это с помощью советов, перехватов или переменных настроек.Обязательно укажите (require 'mouse) до определения mouse-drag-track, чтобы гарантировать, что вы переопределяете встроенное определение, а не переопределяете ваше.Возможно, вы захотите добавить проверку к вашему .emacs прямо над переопределением, чтобы напомнить вам проверять наличие новых версий перезаписываемой библиотеки / функции:

(unless (eq emacs-major-version 23)
  (error "check for new mouse-drag-track"))
0 голосов
/ 27 августа 2011

Это ошибка в emacs, которая была введена в историю исходного кода в 2001 году. Я опубликовал патч, который можно применить к локальным установкам.Надеемся, что сопровождающие emacs продолжат расследование.

Вот мой патч и обсуждение:

http://lists.gnu.org/archive/html/emacs-devel/2011-08/msg00818.html

...