Предотвратить Emacs от изменения буфера обмена OS X?

Как я могу запретить Emacs когда-либо изменять буфер обмена OS X, если я явно не попросил об этом?

Я перепробовал все:

(setq x-select-enable-clipboard nil)
(setq interprogram-cut-function nil)
(setq x-select-enable-primary nil)
(setq mouse-drag-copy-region nil)

Что не позволяет kill / yank изменять буфер обмена, но выделенный текст все еще помещается в буфер обмена.

Это GNU Emacs.app на OS X.

Что еще я должен попробовать?

1 ответ

После некоторого изучения той же проблемы, я считаю, что проблема на самом деле лежит в Emacs x-select-text функция, которая явно игнорирует значение x-select-enable-clipboard на NextStep (а OS X является NextStep).

Я "решил" эту проблему, заменив x-select-text с функцией no-op, а затем явно используя ns-{get,set} монтажную панель для функции interprogram{cut,paste}:

; Override the default x-select-text function because it doesn't
; respect x-select-enable-clipboard on OS X.
(defun x-select-text (text))
(setq x-select-enable-clipboard nil)
(setq x-select-enable-primary nil)
(setq mouse-drag-copy-region nil)

(setq interprogram-cut-function 'ns-set-pasteboard)
(setq interprogram-paste-function 'ns-get-pasteboard)

Вот оригинал x-select-text код:

(defun x-select-text (text) "Выберите TEXT, строку, в соответствии с оконной системой. На X, если`x-select-enable-clipboard'не ноль, скопируйте TEXT в буфер обмена. Если `x-select-enable-primary'не ноль, поместите TEXT в основной выбор. В MS-Windows сделайте TEXT текущим выбором. Если `x-select-enable-clipboard' не ноль, скопируйте текст в буфер обмена также. На Nextstep, поместите TEXT в монтажную область (`x-select-enable-clipboard'не используется). " (cond ((eq (framep (selected-frame))) 'w32)
         (если x-select- enable-clipboard (w32-set-clipboard-data text)) (setq x-last-selected-text text)) ((featurep 'ns); Это OS X;; Не отправляйте в буфер обмена слишком много текста.;; Это становится медленным, и если действительно большое, это вызывает ошибки.
         (Ns-set-pasteboard text) (setq ns-last-selected-text text)) (t;; С multi-tty эта функция может быть вызвана из tty frame.
         (when (eq (framep (selected-frame)) 'x)
           (когда x-select-enable-primary
             (x-set-selection 'PRIMARY text)
             (setq x-last-selected-text-primary text))
           (когда x-select-enable-clipboard
             (x-set-selection 'текст CLIPBOARD)
             (setq x-last-selected-text-clipboard text)))))) 
Другие вопросы по тегам