backward-kill-word ignora espacios en blanco, ¿hay otra versión más amigable?

7

Emac backward-kill-wordtiende a eliminar más de lo que quiero.
Por ejemplo, cuando presiono eliminar varias veces en esto:

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

Yo obtengo:

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. 

Esperaba esto en el tercer paso:

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

Quiero saber: - ¿Existe una filosofía detrás de eliminar más de lo que se quiere?
- ¿Puedo hacer que la palabra emac-backward-delete-word sea más amigable? Es decir, eliminar espacios en blanco, pero no matar "demasiado"?

EDITAR Realmente no sé 'qué' quiero. Quizás lo haga más parecido a otras funciones de eliminación como en google-keep u otras aplicaciones de edición de texto.

edit2
Mientras tanto, lawlist arregló su función personalizada que funciona bastante bien: ingrese la descripción del enlace aquí

Leo Ufimtsev
fuente
2
Esto corre el riesgo de ser cerrado como poco claro. No especifica qué comportamiento desea. Especificar. backward-kill-wordhace lo que se pretende hacer. Puede definir otro comando para hacer "lo que se quiere" y no "matar" demasiado ". Pero si desea ayuda con eso, entonces podría considerar especificar el comportamiento que está buscando.
Dibujó el
1
Aquí hay un enlace a mi propia función de eliminar palabras, que puede interesarle modificar para que se adapte a sus necesidades: stackoverflow.com/a/20456861/2112489 No está diseñado para almacenar la eliminación en el anillo de cierre, así que lo llamo Eliminar en lugar de matar. No tiene nada que ver con el timón o el cable de la llave. El comportamiento (en mi opinión) se aproxima a lo que varios procesadores de texto han hecho a lo largo de los años.
leyes
@lawlist yah, esto es más o menos lo que estaba buscando, excepto que encontré que la función allí no se ajusta y no comienza a eliminar cosas si hay espacios en blanco al final.
Leo Ufimtsev
La filosofía de Emacs es estar siempre un paso por delante del usuario, por lo que todavía no lo sabe.
politza
@LeoUfimtsev ¿Hay algo que no le guste de la solución que proporcioné?
rekado

Respuestas:

4

El comportamiento de backward-kill-worddepende de la definición de una "palabra" en el modo actual. Puede cambiar esta definición y arriesgarse a romper cosas o puede modificarla kill-word.

backward-kill-wordes solo kill-wordcon un argumento negativo; kill-wordestá kill-regionsobre la región dividida por punto y la posición después de correr (forward-word arg). Reemplazar forward-wordtemporalmente debería hacer el truco.

Aquí estoy reemplazando temporalmente forward-wordcon forward-same-syntaxpara lograr el efecto deseado en backward-kill-word(y kill-wordporque me gusta que las cosas sean 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)

Ahora el comportamiento es 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
fuente
1
Hola, probé lo anterior, pero cuando corro hacia atrás, mato la palabra, todavía obtengo el viejo comportamiento. Estoy en Emacs 25.4 con el nuevo modo org. ..
Leo Ufimtsev
@LeoUfimtsev Te vi mencionar 25.4 en otro lugar también. ¿Te refieres a 24.5? O 24.4?
Kaushal Modi
Hmm, creo que me confundí. Me refería a 25.0.50.4. Y quizás hace un mes usé 25.0.50.3, pero ahora actualicé.
Leo Ufimtsev
@rekado No puedo hacer que esto funcione en 24.5.1. ¿Alguna idea? Ejecutando los advice-addretornos del sexp nil, ¿se espera eso?
Lenar Hoyt
1
Es muy posible que primero tenga que evaluar la definición original de kill-wordantes de aplicar el consejo :( No sé por qué es así. Preguntará en la lista de correo.
rekado