Estou usando line-number-mode
para ter um indicador da linha atual na minha modelagem, no entanto, para arquivos grandes ou melhor, arquivos com linhas longas, ele começa a exibir dois pontos de interrogação em vez de um número de linha. Eu cavei um pouco e descobri que enquanto line-number-mode
está definido simple.el
, as variáveis personalizáveis (e provavelmente toda a lógica envolvida) são definidas xdisp.c
. Alterar a line-number-display-width
variável para um número arbitrariamente alto pode corrigir isso, mas estou muito mais interessado no trecho de código e na lógica que o faz imprimir os dois pontos de interrogação. Seria muito útil se algum de vocês pudesse encontrá-lo para mim, talvez até explique a lógica por trás disso.
mode-line
emacs-internals
wasamasa
fonte
fonte
M-: (format-mode-line "%l")
mostram pontos de interrogação, também?format-mode-line
.Respostas:
Graças às sugestões do @ lunaryorn, consegui localizar o código que está causando isso. Parece que
format-mode-line
eventualmente chamadasdecode_mode_spec
para transformar os códigos de formato fornecidos em valores. Para o caso%l
desta função, realiza algumas verificações de sanidade para evitar gastar muito tempo calculando e depois verifica se a linha atual está excedendoline-number-display-limit-width
. Como esse é o caso do meu arquivo em questão, ele salta para umno_value
rótulo que retorna um preenchido??
como valor."Resolver" isso envolve definir a variável para um valor suficientemente alto:
Esse valor foi obtido observando as heurísticas correspondentes nas
xdisp.c
quais a altura da janela é multiplicada por dois mais trinta e a multiplicaline-number-display-limit-width
, para evitar o transbordamentomost-positive-fixnum
em um sistema de 32 bits, um valor de 2000000 seria uma aposta segura.fonte
M-x set-variable <RET> line-number-display-limit-width <RET> 2000000 <RET>