Distinguir entre linhas em branco no final do buffer e na parte inferior da janela?

7

P: como posso obter um indicador visual que distinga entre o final do buffer e a parte inferior da janela?

Caso de uso: Eu tenho um buffer com algumas linhas em branco na parte inferior. No entanto, a parte inferior da janela além das linhas em branco também está em branco. Gostaria de saber, visualmente, onde o buffer termina / as linhas em branco param.

O Vim faz isso com caracteres que não são de texto na parte inferior de uma janela (ou seja, as til) para indicar que não há nada no buffer (como linhas em branco) nesse espaço, como na captura de tela abaixo:

Vim tildes

Como obter o analógico desse recurso do Vim no Emacs?

EDIT: A resposta de @ glucas parece correta, mas eu adoraria ver uma resposta que não use a franja, pois defino a minha como nulo para economizar espaço na tela em uma pequena tela de laptop.

Dan
fonte
Que tal usar o empty-linecomponente do fringe-indicator-listpara indicar onde o final do buffer começa? Por exemplo, (setq fringe-indicator-alist '((empty-line . empty-line))) adicione componentes adicionais à lista, conforme desejado. Este método, no entanto, requer uma franja para ser visível. Veja também: reddit.com/r/emacs/comments/2kdztw/…
lawlist

Respostas:

7

Você pode personalizar indicate-empty-linespara ativar um marcador de franja nas linhas após o final do arquivo ou ligar toggle-indicate-empty-linespara ativar e desativar interativamente.

Existe um pacote no MELPA que substitui o indicador de franja padrão por ~ para uma aparência mais próxima do que você obtém com o vi. Veja vi-tilde-fringe.

Atualizada

Uma abordagem alternativa seria usar o modo de espaço em branco para tornar as quebras de linha visíveis. Tente whitespace-newline-mode, possivelmente ajustando o whitespace-newlinerosto. Visualmente, essa abordagem é mais ocupada do que o vi, pois você está marcando todas as linhas no buffer, exceto as linhas vazias após o conteúdo, mas obtém um resultado semelhante. (Também pode ser possível configurar o modo de espaço em branco ou um modo derivado personalizado para destacar apenas as linhas vazias no final do conteúdo do buffer.)

glucas
fonte
+1, pois essa provavelmente será a resposta. No entanto, como não uso a franja, deixarei a questão em aberto por mais algum tempo para ver se alguém tem uma solução que não seja da franja.
Dan
4

Eu escrevi um pacote, char-font-lock , que (entre outros) destaca linhas vazias no final de um buffer.

Ele também destaca a última linha (caso não termine com uma nova linha), espaço no final das linhas, caracteres de tabulação e caracteres não-ascii. Você pode escolher qual das coisas que gostaria de destacar.

Por exemplo: insira a descrição da imagem aqui

Lindydancer
fonte
11
Hmm, isso não soa realmente relacionados como a pergunta é sobre colocar as coisas na janela onde não existem linhas ...
wasamasa
11
Não, a pergunta era "como posso obter um indicador visual que distingue entre o final do buffer e a parte inferior da janela?" Meu pacote faz isso destacando linhas vazias no final de um buffer. Se você não receber nenhum destaque, sabe que o arquivo está formatado corretamente com uma única nova linha no final da última lista não vazia. É certo que não destaca coisas como o vi, mas isso não fazia parte da questão.
Lindydancer 07/07/2015
Penso que o OP solicitou a indicação de linhas de tela vazias . De acordo com a captura de tela, no entanto, seu pacote parece destacar linhas físicas vazias .
@ Lunaryorn, eu li como se o OP não gostasse do fato de que linhas vazias no final de um buffer não sejam visíveis. ( "Gostaria de ser capaz de dizer, visualmente, onde as extremidades de tampão / linhas em branco parar.")
Lindydancer
11
Concordado, o objetivo desta pergunta parece ser como saber onde o conteúdo do buffer termina. Destacar a última linha desse conteúdo parece uma abordagem tão válida quanto destacar o espaço após o conteúdo.
glucas
3

Alguém escreveu um pacote que gerencia uma sobreposição que abrange a área após o final do arquivo:

https://github.com/jmickelin/vim-empty-lines-mode

Lembre-se de que, embora essa solução se comporte de maneira mais correta e funcione também nos terminais, ela terá necessariamente menos desempenho e mais bugs do que o indicador de margem.

wasamasa
fonte
Apenas uma observação: esse modo secundário faz o que eu estava procurando fazer, mas os usuários devem estar cientes de que ele atualiza sobreposições no final do buffer após cada comando, portanto, pode ser um pouco mais pesado do que se gostaria.
Dan
D'oh ... e acontece que é buggy e não parece muito bem com estreitamento.
Dan
Oh não, a resposta foi inaceitável.
wasamasa
Sim, desculpe, é uma boa descoberta, mas continuarei aceitando por enquanto pelas razões citadas em meus comentários até ter a chance de testá-la com mais rigor.
Dan