Emacs - localizando o cursor em várias janelas

2

Eu comecei a dividir meu quadro do emacs em duas janelas lado-a-lado, mas muitas vezes sou incapaz de dizer de relance em qual janela o cursor está atualmente. Liguei o comando other-window a um chave especial, por isso é fácil de acertar isso - haveria uma maneira de piscar o cursor talvez três vezes logo após mudar para a outra janela? Ou talvez existam soluções melhores em que as pessoas pensaram?

    
por Chap 16.07.2013 / 02:33

1 resposta

1

Acho que é importante que o emacs destaque a linha atual. O modo menor hl-line-mode faz isso. Você pode habilitá-lo em seu buffer atual com M-x hl-line-mode , ou globalmente a partir de sua configuração do emacs:

(global-hl-line-mode 1)

Dê uma olhada no Emacswiki: HighlightCurrentLine . Também menciona outros modos menores que podem ser mais do seu interesse.

Editar:

Enquanto procurava pessoalmente na wiki, encontrei o crosshairs-mode . Eu acho que vou experimentar:

(crosshairs-mode 1)
(setq col-highlight-vline-face-flag  t
      col-highlight-face             hl-line-face)

Editar2:

Eu gosto da linha horizontal, mas acho que a linha vertical constante distrai. Felizmente, crosshairs também fornece uma função de flash flash-crosshairs e um modo inativo toggle-crosshairs-when-idle .

Para exibir a cruz no idle, eu tenho isso na minha configuração:

(require 'crosshairs)
(toggle-crosshairs-when-idle 1)
(setq col-highlight-vline-face-flag  t
      col-highlight-face             hl-line-face)

Mas isso não pisca nos botões de buffer / janela, infelizmente não há ganchos para isso. Mas pelo menos o emacs lisp nos dá funções de aconselhamento , o que nos permite estender as funções existentes. Embora isso possa ser bastante complicado.

Isso irá piscar a mira após as chaves de buffer:

(defadvice switch-to-buffer (after switch-to-buffer-flash-crosshairs activate)
  "Call 'flash-crosshairs' after 'switch-to-buffer'"
  (flash-crosshairs))

Isso deve funcionar na maioria dos casos (quando a troca é feita sem switch-to-buffer )

O interruptor da janela é mais difícil, já que os miniburadores (arquivo aberto, etc.) causam alguns problemas. Então, só pisca quando mudamos para outro buffer:

(defadvice select-window (around select-window-flash-crosshairs activate)
  "Call 'flash-crosshairs' after 'select-window', if switching to another buffer.
The check is necessary to prevent issues with mini-buffer switching."
  (let (cons (cur-buffer-name (buffer-name (current-buffer)))
             ad-arg-bindings)
    ad-do-it
    (unless (string= (buffer-name (window-buffer window))
                     cur-buffer-name)
      (flash-crosshairs))))

ad-arg-bindings são os argumentos para a função aconselhada e ad-do-it executa o original.

Para desativar o uso de avisos:

(ad-remove-advice 'select-window 'around 'select-window-flash-crosshairs)
(ad-remove-advice 'switch-to-buffer 'after 'switch-to-buffer-flash-crosshairs)

Eu acho que abrange a maioria dos casos, embora como eu disse, o conselho é complicado ...

    
por 16.07.2013 / 09:15