¿Es posible deshabilitar la compatibilidad con el mouse en la GUI?

Pregunta:

No puedo creer que no haya forma en Emacs de ignorar el mouse de manera fácil y confiable, pero mi fu de google no parece lo suficientemente bueno como para encontrar cómo hacerlo.

Por fácil y confiable me refiero a deshabilitar el dispositivo, no desvincular los eventos del mouse (lo cual no es confiable ya que cualquier modo puede volver a vincularlos).

Respuesta:

Respuestas de dos y medio:

  1. El código init.el de Artur Malabarba . La publicación del blog tiene comentarios útiles.
  2. El código init.el de Victor Deryagin del que Malabarba derivó el suyo.

Mi tercera "respuesta" probablemente solo se aplica a los paneles táctiles, pero dado que la mayoría de las personas que tienen la necesidad de apagar "el mouse" en realidad usan computadoras portátiles y tocan accidentalmente su panel táctil, lo incluiré. (Junto con una invitación para cualquiera que pueda extender lo siguiente para manejar el mouse, en cuyo caso esta publicación en realidad proporcionará 3 respuestas 🙂 Aunque esta respuesta también se basa en el código init.el , está más orientada al sistema operativo y orientada a X (y probablemente Linux- solo: OS + X != OSX ), otra razón por la que lo incluyo en último lugar.

Este enfoque llama a synclient o xinput dependiendo de cuál funcione para usted. Primero, algunos detalles:

synclient es la forma más nueva / mejor de controlar los synclient , por lo que probablemente debería preferirlo si lo tiene o puede instalarlo. synclient define propiedades que puede establecer en tiempo de ejecución. La propiedad relevante aquí es TouchpadOff que puede verificar (desde un shell) con

synclient -l | fgrep -e TouchpadOff

1 == desactivado (piense en TouchpadOff==true ), 0 == activado. Desafortunadamente, en mi computadora portátil de 10 años, obtengo

$ synclient -l | fgrep -e TouchpadOff
    TouchpadOff             = 2

que aparentemente significa "no funciona", porque empíricamente puedo hacer

synclient TouchpadOff=1

y no pasa nada, mi panel táctil sigue funcionando. Afortunadamente yo (y tal vez) puedo utilizar el {mayores, menos flexible y más propensos a romperse en el kernel / cambio de configuración} xinput . Primero, verifique la ID de su panel táctil: en mi caso, es

$ xinput --list | fgrep -ie touchpad
⎜   ↳ SynPS/2 Synaptics TouchPad                    id=11   [slave  pointer  (2)]

(Tenga en cuenta que también puede hacer algo muy similar para su mouse, si tiene uno, y controlarlo a través de la extensión obvia del siguiente procedimiento. Sin embargo, no estoy discutiendo eso aquí porque synclient no – IIUC – proporciona funcionalidad similar.)

Entonces puedo hacer

xinput --disable 11

que en realidad WFM, e igualmente

xinput --enable 11

Entonces, ¿cómo envolver todo esto para init.el ? Cito a cualquier experto en elisp que pueda mejorar lo siguiente (ciertamente me falta elisp-fu), pero aquí va:

(defconst XINPUT-TOUCHPAD-ID "11") ; if using xinput, SET TO VALUE APPROPRIATE FOR YOUR DEVICE!
(defconst XINPUT-DISABLE-TOUCHPAD (concat "xinput --disable " XINPUT-TOUCHPAD-ID))
(defconst XINPUT-ENABLE-TOUCHPAD  (concat "xinput --enable " XINPUT-TOUCHPAD-ID))
(defconst SYNCLIENT-DISABLE-TOUCHPAD "synclient TouchpadOff=1")
(defconst SYNCLIENT-ENABLE-TOUCHPAD  "synclient TouchpadOff=0")

;;; TEST YOUR DEVICE before you choose to use `synclient` (preferred) or `xinput`
(defconst DISABLE-TOUCHPAD XINPUT-DISABLE-TOUCHPAD)
(defconst ENABLE-TOUCHPAD  XINPUT-ENABLE-TOUCHPAD)

(defun touchpad-off (&optional frame)
  (interactive)
  (shell-command DISABLE-TOUCHPAD))

(defun touchpad-on (&optional frame)
  (interactive)
  (shell-command ENABLE-TOUCHPAD))

(add-hook 'focus-in-hook #'touchpad-off)
(add-hook 'focus-out-hook #'touchpad-on)
(add-hook 'delete-frame-functions #'touchpad-on)

;;; and don't forget to enable the touchpad when you exit Emacs:
(add-hook 'kill-emacs-hook #'touchpad-on)

Una vez habilitado desde su init.el , el código anterior debería apagar su panel táctil cuando cualquier marco de Emacs de GUI (errr … no sé si esto funciona para XEmacs) gana foco, y volver a encenderse cuando un marco de Emacs pierde el foco.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım