Mesmo usando as configurações padrão ( emacs -Q
), descobri que arquivos C grandes podem demorar para rolar com o Emacs.
Se, por exemplo, eu abrir um arquivo grande e segure Page-Down. Ele rolará 1-2 páginas para baixo e, em seguida, travará por um ou dois segundos. Ao liberar o documento, rolará muitas páginas para baixo (20 páginas ou mais). *
Eu sei que o Emacs é capaz de comportamento menos irregular, porque, se eu tocar rapidamente page down, ele conseguirá acompanhar e não ficará travado como antes.
É possível que o Emacs não tente manipular vários eventos ao mesmo tempo e, em vez disso, redesenhe entre os eventos?
Ou, de alguma forma, tornar-se mais responsivo em vez de travar enquanto ele tenta processar muitos eventos?
* A desaceleração real nesse caso é causada pelo realce da sintaxe, pois se eu rolar o documento inteiro uma vez, a rolagem é rápida. Analisei as diferentes opções relacionadas ao bloqueio de fontes e concluí que os padrões de bloqueio de fontes são razoáveis e ajustá-los não resolve o problema, mencionando isso, já que eu já investiguei isso e não acho que seja uma parte importante disso. questão.
fonte
emacs -Q
para descartar isso), ou pode ser que seu disco esteja muito lento. Você também pode tentar desativar o realce da sintaxe ou outro comportamento útil (coloque o buffer no modo fundamental).Respostas:
Como você notou, isso acontece basicamente quando a exibição é lenta demais por algum motivo. Não há muito que possamos fazer no caso geral (quando é "muito lento"), mas quando é "um pouco lento demais", você pode tentar um deles (ou ambos, embora provavelmente não faça nada além de apenas um dos dois):
Observe que os dois são novos no Emacs-25.
fonte
fast-but-imprecise-scrolling
declara " Quando não nulo, acelere as operações de rolagem " . Talvez o exemplo deva refletir um valor não nulo, pois isso aceleraria a rolagem.Uma coisa que você pode fazer é passar um argumento de prefixo numérico para o comando de rolagem, em vez de apenas pressionar e manter pressionada a tecla para invocá-lo repetidamente.
Por exemplo, se você estiver usando a
<next>
chave (akaPageDown
), o comando que ela chama éscroll-up-command
. EC-h f scroll-up-command
diz que um prefixo numérico arg diz para rolar tantas linhas.Por exemplo: Suponha que seu buffer possua 50.000 linhas e o cursor esteja na parte superior (na primeira linha). Se você o fizer
C-u 25000 <next>
, ele rolará até a metade do buffer (25.000 linhas).Ainda haverá uma pausa, mas será um pouco menor.
Outra possibilidade é diminuir um certo número de coisinhas grandes do Emacs. Se o seu buffer separar seções de texto usando caracteres
^L
(Control-L, feed de formulário), você poderá usar os comandos de navegação da página, comoforward-page
, ao qual está vinculadoC-x ]
. Novamente, você pode passar um argumento de prefixo numérico para avançar tantas páginas ao mesmo tempo. Se não houver^L
caracteres, você poderá usarforward-paragraph
(C-<down>
)forward-line
ou outro comando de movimento com o prefixo arg.Da mesma forma, você pode usar o comando
goto-line
(M-g M-g
) para ir para um número de linha específico. (Escolha um número grande.) O comandowhat-line
informa qual é o número da linha atual (você também pode exibi-lo na linha de modo). (M->
leva você até o final do buffer, ondeM-x what-line
você informa quantas linhas existem no total.)(Adicionado após o seu comentário sobre deslizar até você ver isso ou aquilo.) Use a pesquisa incremental para navegação. Procure em frente algo próximo do local em que deseja rolar, usando
C-s
ou (para pesquisa regexp)C-M-s
.Se você usar a biblioteca Isearch + , também poderá incorporar predicados arbitrários em sua pesquisa, em tempo real.
Ou seja, você não precisa pesquisar usando apenas a correspondência de padrões. Você pode, por exemplo, procurar (1) corresponder a um padrão que seleciona um bloco de comentários inteiro ou uma
switch
declaração completa e (2) exigir que a correspondência tenha um determinado tamanho (número de caracteres).O Isearch + também permite procurar correspondências para vários padrões ou procurar uma correspondência para um padrão dentro de uma determinada distância para ("próximo") uma correspondência para outro padrão (onde a distância é medida em caracteres, palavras, sexps, listas, frases). ..)
fonte
Publicando isso, pois é uma solução fraca , mas melhor que nada.
Em vez de alterar todo o comportamento do emacs, é possível escrever funções que são redesenhadas após cada operação, o que evita interrupções e torna a rolagem mais responsiva à página para cima / baixo e roda do mouse.
fonte