Gere evento mouse-2 a partir do trackpad do MacBook

7

Eu tenho o Emacs.app versão 24.5 (9.0) em um MacBook com Mac OS X 10.11.3 (15D21). Como posso gerar o mouse-2 a partir do trackpad do meu MacBook? Pesquisei no Google e encontrei referências a mac-emulate-three-button-mouse( esta pergunta ) (não encontradas na versão do Emacs) e truques semelhantes que não funcionam.

É possível gerar um evento desse tipo ou existe outra maneira, como vincular globalmente algo como s- <mouse-1> a ​​<mouse-2>, etc.?

Renzo
fonte

Respostas:

4

Você também pode dizer ao flyspell para usar o mouse-3que parece mais apropriado para um menu de contexto:

(eval-after-load "flyspell"
    '(progn
       (define-key flyspell-mouse-map [down-mouse-3] #'flyspell-correct-word)
       (define-key flyspell-mouse-map [mouse-3] #'undefined)))

Resposta roubada daqui

Bryan Ash
fonte
Isso é ótimo! Venho modificando o flyspell.el.gz sempre que atualizava, perdia.
Joshua Olson
4

Depois de pesquisar e ler mais o manual, encontrei uma solução que funciona para mim, adicionando ao arquivo ~/.emacs.d/init.ela seguinte linha:

(define-key key-translation-map (kbd "<s-mouse-1>") (kbd "<mouse-2>"))

Dessa forma, eu posso gerar mouse-2eventos pressionando Command ao clicar com o trackpad.

key-translation-mapé um mapa de teclas de tradução (consulte o manual ) que "... usa mapas de teclas de tradução para traduzir determinadas sequências de eventos em outras".

Renzo
fonte
Infelizmente isso não funciona para mim. Quando eu tento usar s-rato-1, recebo mensagens como "flyspell-corrigir-palavra deve ser vinculado a um evento com parâmetros"
killdash9
Acho que a resposta de Bryan Ash é a correta para a maioria das pessoas.
Joshua Olson
2

Copiado da minha resposta no SuperUser:

Isso não é tanto uma solução como uma solução alternativa, mas atualmente estou experimentando o aplicativo MiddleClick (de código aberto) que adiciona funcionalidade de clique do meio em todo o sistema, acionando um clique do meio quando você faz três dedos- toque.

Os únicos problemas são que você pode pressionar o botão do meio acidentalmente tocando três dedos no trackpad de vez em quando, o que tem sido um pouco irritante. Obviamente, também existem as ligações do trackpad do sistema (por exemplo, App Exposeou Mission Control) que podem entrar em conflito com o toque de três dedos se você não fizer o movimento de rolagem correspondente suficientemente pronunciado. Provavelmente, você pode corrigir esses conflitos ajustando as fontes, pois parece que não há configurações no próprio aplicativo em execução.

Você também pode instalar o MiddleClick via homebrew:

brew cask install middleclick

EDITAR:

Acontece que o comportamento de três dedos do MiddleClick é bastante irritante e inutilizável, pelo menos para mim. Além disso, tentar modificar as fontes para melhorar o comportamento provou ser mais problemático do que vale a pena, como o MiddleClick utiliza MultitouchSupport.framework, que é privado e requer engenharia reversa para entender os parâmetros de suas funções. Infelizmente, não tenho tempo para isso agora, esp. sobre algo tão básico. No entanto, eu encontrei o BetterTouchTool que implementa a mesma funcionalidade básica, mas oferece muito mais personalização. Não é gratuito, mas custa apenas US $ 3 e, além disso, funciona bem com o Magic Trackpad 2, o que não pode ser dito para o aplicativo semelhante que eu também experimentei, o MagicPrefs.

O BetterTouchTool também pode ser instalado via homebrew:

brew cask info bettertouchtool
PIB2
fonte
1

Eu adaptei a resposta de bryan-ash para usar a add-hookfunção em vez de eval-after-loadpersonalizar minhas ligações mágicas do mouse para o flyspell.

  1. Adicione o código elisp abaixo ao seu .emacsarquivo para mapear o mouse mágico down-mouse-3e mouse-3clicar nele flyspell.

    ;;
    (add-hook 'flyspell-mode-hook 'my-flyspell-mode-hook)
    ;;
    (defun my-flyspell-mode-hook ()
      ;; Do things when flyspell enters of leaves flyspell mode
      ;; Added manually
      ;;
      ;; Magic Mouse Fixes
      (if flyspell-mode (progn
           (define-key flyspell-mouse-map [down-mouse-3] #'flyspell-correct-word)
           (define-key flyspell-mouse-map [mouse-3] #'undefined))
        nil)
      ;; End my-flyspell-mode-hook
      )
    

Esta resposta foi validada usando:

emacs-version: GNU Emacs 26.1 (build 1, x86_64-apple-darwin14.5.0, NS appkit-1348.17 Versão 10.10.5 (Build 14F2511)) de 30-05-2018

Melioratus
fonte