Faça a porcentagem de exibição da linha de modo e não "Top / Bottom / All"

9

Modo de linha 's %pexibe o percentuais da vista actual da memória intermédia:

% p A porcentagem do texto do buffer acima da parte superior da janela, ou 'Top', 'Bottom' ou 'All'. Observe que a construção da linha de modo padrão trunca isso para três caracteres.

Não gosto da parte superior / inferior / tudo e gostaria de exibir sempre a porcentagem. Existe uma maneira de conseguir isso?

ClojureMostly
fonte
2
Estou curioso porquê. Topsignifica 0%. Bottomsignifica 100%. Allsignifica 100% e o topo também é visível. Você pode fazer praticamente qualquer coisa que desejar na linha de modo, mas neste caso, seria uma dor de cabeça fazer isso. Observe que você pode reverter facilmente a direção da porcentagem - consulte %P(em vez de %p).
Drew
3
Meu cérebro procurará um número quando quiser saber onde estou. Quando ocasionalmente tenho que lembrar que também pode ser Top / Bottom, tenho que lembrar disso.
ClojureMostly
Uma ideia seria calcular o tampão de tamanho - ou seja, o número de pontos - entre point-mine window-starte, window-ende point-max, e, se assim for desejado, o tamanho da memória intermédia visível pode ser tomada em - isto é, entre os pontos window-startde window-end- aqueles os cálculos poderiam ser feitos em um piscar de olhos e não afetariam o desempenho porque o ponto não se move. Esses cálculos de tamanho de buffer podem ser transformados em porcentagens. Acredito que seja uma resposta, mas deixarei que outra pessoa a escreva, porque tenho outros projetos em andamento hoje.
lawlist
Nunca realmente achei útil conhecer a porcentagem de buffer acima: \ IMHO conhecendo o current_line / total_lines e, eventualmente, sabendo que TODO o buffer de conteúdo é exibido (quando estou na primeira linha) é mais útil. Apenas minha opinião, talvez seja a minha experiência que não seja ampla o suficiente.
Nsukami _

Respostas:

5

Aqui está um exemplo de como você pode fazer algo assim. Observe, no entanto, que ele exibe exatamente o que você pediu (porcentagem de texto acima da janela), o que provavelmente não é o que você realmente deseja. Por exemplo, ele nunca é exibido 100%, pois sempre haverá algum texto dentro da janela.

(setcar mode-line-position
        '(:eval (format "%3d%%" (/ (window-start) 0.01 (point-max)))))

Você também pode usar window-end, que tem a desvantagem oposta (quase nunca exibe 0).

(setcar mode-line-position
        '(:eval (format "%3d%%" (/ (window-end) 0.01 (point-max)))))

Você pode envolver essas cordas com espaços ou algum outro preenchimento.

Malabarba
fonte
0

A built-in de código para %papenas olha para window-starte point-maxe calcula a porcentagem dessa forma. Você pode descobrir isso usando C-h f format-mode-linee seguindo o link para as fontes do Emacs C (supondo que você as tenha em algum lugar).

Portanto, você pode fazer a mesma coisa usando um :evalformulário no mode-line-format.

Tom Tromey
fonte
7
Você pode expandir sua resposta para fornecer a solução completa?
precisa