Como ajustar automaticamente o espaço em branco após os puxões?

7

Ao editar texto em linguagem humana e mover fragmentos de texto, frequentemente encontro o problema de que o espaço em branco movido no início ou no final de um fragmento não se encaixa na nova posição. Por exemplo, considere este parágrafo:

This is the first sentence.  This is the second sentence.  These
three sentences are the whole paragraph.

Se eu mover a última frase antes da primeira por kill + yank, tenho espaços em branco à esquerda ou à direita. Um problema semelhante ocorre nas enumerações.

Outro caso de uso é se eu quero inserir uma única palavra ou expressão que esteja no anel de morte sem nenhum espaço em branco à direita ou à esquerda. Por exemplo, considere a palavra "muito" no ringue matador e a seguinte frase:

Such a minor mode would be useful.

Após puxar, isso pode se tornar erroneamente:

Such a minor mode would bevery useful.

Existe uma maneira de ajustar o espaço em branco nos textos humanos automaticamente?

Torsten Bronger
fonte

Respostas:

3

Aqui está uma função, delete-leading-whitespace-on-linepara fazer como o nome sugere:

(defun delete-leading-whitespace-on-line ()
  "Delete whitespace at the beginning of the current line."
  (interactive)
  (let ((start (line-beginning-position))
        (end (line-end-position)))
    (save-excursion
      (delete-whitespace-rectangle start end nil))))

Para o espaço em branco à direita , eu uso M-x delete-trailing-whitespace.

Para acioná-los após os puxões, você pode fazer algo como:

(defun yank-and-trim-whitespace ()
  "Yank and then trim whitespace on the line."
  (interactive)
  (yank)
  (delete-leading-whitespace-on-line)
  (delete-trailing-whitespace))

e vinculá-lo como:

(global-set-key "\C-y" 'yank-and-trim-whitespace)

Você também pode experimentar o modo de limpeza de espaço em branco de Steve Purcell , um modo secundário que:

inteligente chamará limpeza de espaço em branco antes que os buffers sejam salvos.

PS Sua conta do GitHub é um tesouro de coisas boas do Emacs.

yurrriq
fonte
Eu não tenho a reputação ainda, mas aqui está um link para a documentação pertinente: gnu.org/software/emacs/manual/html_node/emacs/...
yurrriq
São call-interactivelynecessários aqui? Você não pode simplesmente chamar as funções?
Erikstokes 03/07/2015
@erikstokes, boa captura. Os call-interactivelysão redundantes.
yurrriq
Eu acho que usar call-interactivelyaqui faria funcionar yank-pop.
politza
1

Isso parece fazer o que você pediu. Por outro lado, se já houver espaços em branco extras, eles serão mantidos como antes.

  (defun yank-and-adjust-whitespace ()
  (interactive)
  (if (equal (char-after) ?\s)
      (progn
        (insert " ")
        (yank))
    (if (eolp) (if (bolp) (yank)
        (if (equal (char-before) ?\s)
            (yank)
          (insert " ")
          (yank)))
      (yank)
      (insert " "))))

Como a resposta de Eric Bailey, você pode associar o atalho abaixo.

(global-set-key "\C-y" 'yank-and-adjust-whitespace)

A utilização eolp/bolpfoi emprestada de https://emacs.stackexchange.com/a/13741/ .

Nome
fonte
@wasamasa obrigado pela edição, vi que você mudou ? para ?\s. Parece que ambos funcionam. Estou interessado em saber sobre suas diferenças.
Nome
11
Correto, ambos são equivalentes. O manual recomenda, ?\sporém, porque parece muito menos confuso ? e garante que você pretenda combinar um espaço em vez de digitar incorretamente.
wasamasa