Como impedir que o modo python destaque ocasionalmente tudo como string

7

Eu uso python-modepara o meu código Python e, de vez em quando, o marcador de sintaxe fica confuso e acha que tudo no buffer é uma string literal. Isso normalmente parece acontecer quando eu crio uma sequência de caracteres; por alguns segundos depois de digitar as aspas, tudo depois do cursor é destacado como uma sequência.

Existe alguma maneira de evitar isso completamente? Ou, se não, existe alguma maneira de fazer o emacs / python-mode se recuperar mais rapidamente?

ed: Para ficar claro, o realce incorreto persiste mesmo após o fechamento das cotações e o buffer salvo. Mas, novamente, nem sempre é assim, às vezes.

Abingham
fonte
5
Você quer dizer depois de digitar as aspas de abertura? Porque, nesse caso, o restante do buffer é uma string (doc). Você pode resolver isso fazendo com que o Emacs insira automaticamente as aspas finais após o cursor ou algo assim.
Tikhon Jelvis 23/10
Não, a persistir destacando algumas vezes por vários segundos após as aspas foram fechadas (embora eu ainda não tem emacs insira-os para mim.)
abingham
Ugh, algo semelhante acontece comigo o tempo todo quando estou em um REPL e imprimo acidentalmente um monte de texto. Não tenho certeza se está relacionado, mas talvez esse problema seja mais geral do que apenas python-mode.
purple_arrows
Ponto interessante. Testei um pouco o modo c ++ e parece ter o mesmo comportamento. Se eu deixar uma string literal "aberta" por tempo suficiente, o restante do buffer será destacado como parte da string (o que faz todo o sentido.) Depois de fechar a literal, pode demorar alguns segundos para que o destaque se recupere. Parece, então, que há um timer dizendo ao emacs para re-analisar / destacar o buffer.
abingham
Você já tentou relatar esse bug?
Dmitry

Respostas:

6

Quando você modifica o buffer, somente as linhas que você modificou são realçadas imediatamente. Se a modificação afetar o realce das linhas mais abaixo, elas serão realçadas mais tarde através de um timer inativo (isto é, acontece depois que você para de digitar).

Esse atraso é controlado jit-lock-context-timee o padrão é 0.5s. Observe que realmente significa "O Emacs ficou ocioso por meio segundo", portanto, enquanto você continuar dando comandos ao Emacs sem deixar mais de meio segundo entre os comandos, o realce não ocorrerá.

Se você acha que demora mais de 0,5s e pode criar uma receita que desencadeia esse atraso excessivo, convém M-x report-emacs-bug.

Stefan
fonte