Aquí está mi problema: Uso Emacs y obtengo muchos búferes que son bastante inútiles todo el tiempo, como * Messages * o * Completions *.Killing buffers cuyos nombres comienzan con una cadena en particular
Quiero enlazar \ C-y para cerrar todos los búferes que comienzan con * a excepción de * shell * (y * shell * < k>) búferes.
Para hacer eso, me gustaría añadir un poco de Emacs-Lisp en mi archivo .emacs:
(defun string-prefix s1 s2
(if (> (string-length s1) (string-length s2)) nil
(string=? s1 (substring s2 0 (string-length s1)))))
(defun curry2
(lambda (f)
(lambda (x)
(lambda (y)
(f x y)))))
(defun filter
(lambda (f l)
(if (null? l) '()
(let ((rest (cdr l)))
(if (f (car l)) (cons (car l) rest)
rest)))))
(defun kill-useless (arg)
(interactive "p")
(map 'kill-buffer
(filter
(not ((curry2 string-prefix) "*shell*"))
(list-buffers)
)))
(global-set-key "\C-y" 'kill-useless)
ya he probado string-prefix
y curry2
usando Scheme y filter
parece bastante sencillo. Lamentablemente, no puedo hacer que kill-useless
funcione correctamente.
Dice filter: Invalid function: (curry2 string-prefix)
.
Ahora, la cosa es que tipo de malo en Emacs-Lisp, yo realmente no uso ninguna Lisp, excepto Esquema, y en el Esquema (MIT), esto funciona:
(filter ((curry2 string-prefix?) "*shell") '("*shell*" "*sh22" "eel"))
;Value 5: ("*shell*")
me gustaría :
- una manera de arreglar mi código
- sugerencias sobre cómo hacer esto de una manera diferente
Gracias!
El '* Mensaje *' buffer es un interés uno: cada vez que Emacs le diga algo , lo dejó allí, por lo que puede, por ejemplo, copiarlo y pegarlo en google para encontrar una solución en google. Tenga en cuenta también que cuando probablemente utilizará algún modo (como el mago) que utilizará dicho buffer de una manera útil. –
Sí, terminé manteniendo ese buffer también. ¡Gracias por el consejo! –