backward-kill-word ignora espaços em branco, existe outra versão mais amigável?

7

O Emac backward-kill-wordtende a excluir mais do que eu quero.
Por exemplo, quando eu pressiono excluir várias vezes sobre isso:

(key-chord "qf" 'helm-org-in-buffer-headings)   ;heading search. |

Eu recebo:

1. (key-chord "qf" 'helm-org-in-buffer-headings)   ;heading|
2. (key-chord "qf" 'helm-org-in-buffer-headings)   ;|
3. (key-chord "qf" 'helm-org-in-buffer-|   <<< too much deletion. 

Eu esperava isso na terceira etapa:

3. (key-chord "qf" 'helm-org-in-buffer-headings)|

Eu quero saber: - Existe uma filosofia por trás da exclusão de mais do que o que é desejado?
- Posso tornar a palavra de exclusão reversa do emac mais amigável? Ou seja, remova os espaços em branco, mas não exagere 'demais'?

EDIT Eu realmente não sei 'o que' eu quero. Talvez torne isso mais parecido com outras funções de exclusão, como no google-keep ou em outros aplicativos de edição de texto.

edit2
Enquanto isso, o lawlist corrigia sua função personalizada que funciona bastante bem: insira a descrição do link aqui

Leo Ufimtsev
fonte
2
Isso corre o risco de ser fechado como pouco claro. Você não especifica qual comportamento deseja. Especificamos. backward-kill-wordfaz o que se destina a fazer. Você pode definir outro comando para fazer "o que é desejado" e não "exterminar 'demais'". Mas se você quiser ajuda com isso, considere especificar o comportamento que está procurando.
Tirou
11
Aqui está um link para minha própria função delete-word, que você pode modificar modificando para atender às suas necessidades: stackoverflow.com/a/20456861/2112489 Ele não foi projetado para armazenar a exclusão no ringue, então eu chamo de excluir em vez de matar. Não tem nada a ver com leme ou cordão. O comportamento (na minha opinião) se aproxima do que vários processadores de texto fizeram ao longo dos anos.
lawlist
@lawlist yah, isso é mais ou menos o que eu estava procurando, exceto pelo fato de eu encontrar a função que não existe e não começar a excluir as coisas se houver espaços em branco à direita?
Leo Ufimtsev
A filosofia do Emacs é ficar sempre um passo à frente do usuário, então você ainda não sabe.
politza
@LeoUfimtsev, há algo que você não goste na solução que forneci?
rekado

Respostas:

4

O comportamento de backward-kill-worddepende da definição de uma "palavra" no modo atual. Você pode alterar essa definição e arriscar quebrar coisas ou pode modificar kill-word.

backward-kill-wordé apenas kill-wordcom um argumento negativo; kill-wordé kill-regionsobre a região estendida por ponto e pela posição após a execução (forward-word arg). Substituir forward-wordtemporariamente deve funcionar.

Aqui estou substituindo temporariamente forward-wordpor forward-same-syntaxpara obter o efeito desejado em backward-kill-word(e kill-wordporque gosto que as coisas sejam consistentes):

(defun my/kill-word-advice (orig-fun &rest args)
  "Replace forward-word with forward-same-syntax."
  (cl-letf (((symbol-function 'forward-word) #'forward-same-syntax))
    (apply orig-fun args)))
(advice-add 'kill-word :around #'my/kill-word-advice)

Agora o comportamento é este:

1. (key-chord "qf" 'helm-org-in-buffer-headings)   ;heading|
2. (key-chord "qf" 'helm-org-in-buffer-headings)   ;|
3. (key-chord "qf" 'helm-org-in-buffer-headings)   |
4. (key-chord "qf" 'helm-org-in-buffer-headings)|
5. (key-chord "qf" 'helm-org-in-buffer-headings|
5. (key-chord "qf" 'helm-org-in-buffer-|
rekado
fonte
11
Olá, eu tentei o acima, mas quando corro para trás mate palavra, ainda recebo o comportamento antigo. Eu estou no Emacs 25.4 com org-mode mais novo ..
Leo Ufimtsev
@LeoUfimtsev eu vi você mencionar 25.4 em outro lugar também. Você quer dizer 24,5? Ou 24,4?
precisa saber é o seguinte
Hmm, acho que fiquei confuso. Eu quis dizer 25.0.50.4. E talvez um mês atrás eu usei 25.0.50.3, mas agora eu atualizei.
21815 Leo Ufimtsev
@rekado Não consigo fazer isso funcionar em 24.5.1. Qualquer ideia? Executando o advice-addsexp retorna nil, isso é esperado?
Lenar Hoyt
11
Pode muito bem ser que você primeiro tem que eval a definição original de kill-wordantes do conselho é aplicado :( Eu não sei por que isso acontece vai pedir na lista de discussão..
rekado