Como corrigir o parágrafo de preenchimento do modo de remarcação?

8

markdown-modeé muito bom em preencher parágrafos em geral, mas há uma falha que realmente me incomoda. Se um parágrafo contiver uma linha que termine em dois espaços, ele só começará a ser preenchido e nunca preencherá essa linha.

Por exemplo, considere o exemplo a seguir, onde a segunda linha termina em dois espaços.

If I hit M-q right here at the start, this line will get broken into two, but the others won't.
If I hit M-q right here only the NEXT line will get split. All because this line here ends in two spaces.__
If I hit M-q right here, this line will get broken into two, but the others won't.

O exemplo se explica. Mesmo que eu acerte M-qno início de cada linha, ainda fico com isso:

If I hit M-q right here at the start this line will get broken into
two, but the others won't.
If I hit M-q right here only the NEXT line will get split. All because this line here ends in two spaces.__
If I hit M-q right here, this line will get broken into two, but the
others won't.

O que eu gostaria de ter é o seguinte:

If I hit M-q right here at the start this line will get broken into
two, but the others won't. If I hit M-q right here only the NEXT line
will get split. All because this line here ends in two spaces.__
If I hit M-q right here, this line will get broken into two, but the
others won't.

P: Como posso me fill-paragraphcomportar assim?

Claramente, markdown-modeestá considerando toda a linha do meio como um separador de parágrafos, quando deveria ser apenas os espaços no final.

Malabarba
fonte

Respostas:

1

Portanto, um martelo deselegante de uma solução para isso é definir paragraph-separatecomo uma variável local do arquivo. O modo define "\\(?:[ \t\f]\\|.* \\)*$"como uma variável local de modo; se eu configurá-lo de volta ao seu valor padrão (retirado da string de ajuda para paragraph-separate) da seguinte forma:

-*- mode: markdown; paragraph-separate: "[  ^L]*$" -*-

então recebo o comportamento que você está procurando:

If I hit M-q right here at the start, this line will get broken into
two, but the others won't.  If I hit M-q right here only the NEXT line
will get split. All because this line here ends in two spaces.__If I
hit M-q right here, this line will get broken into two, but the others
won't.

O comentário no repositório git que introduz isso diz:

Respeite as quebras de linha rígida ao preencher parágrafos

Uma desvantagem deste patch é que os comandos de movimento de parágrafos também param em quebras de linha rígida, alterando ligeiramente a definição de "parágrafo" nesse modo.

Depois de muito rastreamento, acho que tenho a função realmente invocada por M-qdown to fill-individual-paragraphs; mas é complicado, e mesmo depois de olhar para esse comentário, ainda não descobri exatamente o que está acontecendo ... portanto, martelo franco, e não sei que outras consequências ele terá. Mas parece funcionar. :-)

Saint Aardvark, o Carpete
fonte
Obrigado. Infelizmente, isso não é o comportamento que estou procurando. Preenchei corretamente as 2 primeiras linhas, mas a 3 foi preenchida incorretamente. Observe a pequena diferença entre o parágrafo que você tem aqui e o "resultado desejado" na pergunta. A terceira linha é puxada para o emaranhado, o que muda a maneira como o parágrafo é renderizado pela remarcação. Isso é indesejável. A terceira linha deve permanecer uma linha própria. Suspeito que isso seja uma limitação da lógica de preenchimento de parágrafos do Emacs e só pode ser corrigida com uma função dedicada.
Malabarba
Arghh, eu senti falta disso! :-(
Saint Aardvark, o Carpete,