hooks – ¿Cómo reemplazar focus-out-hook con after-focus-change-function en emacs 27?

Pregunta:

En mi antiguo emacs, he definido el siguiente código.

   (add-hook 'focus-out-hook (lambda () (save-some-buffers t)))

Después de actualizar a emacs 27, dijo que focus-out-hook está obsoleto, y que el nuevo es after-focus-change-function, pero simplemente reemplazarlo no funciona. Lo siguiente no funciona

(add-hook 'after-focus-change-function (lambda () (save-some-buffers t)))

Me parece que el primero es un gancho, así que necesito usar add-hook, pero para que funcione la nueva función, ¿cómo se usa? Mi propósito es guardar un búfer después de cambiar a otra aplicación.

Respuesta:

Podrías intentar usar algo como:

(add-function :after after-focus-change-function #'your-function-here)

Entonces, en su caso, algo como esto debería hacer lo que busca:

(add-function :after after-focus-change-function (lambda () (save-some-buffers t)))

Si observa la documentación de after-focus-change-function con Ch v after-focus-change-function RET , notará que sugiere usar add-function para modificarlo:

[…] El código que quiera hacer algo cuando cambia el enfoque del marco debe usar add-function para agregar una función a este […]

Tenga en cuenta también que la documentación sugiere que su función debe llamar a frame-focus-state para recuperar el último estado de enfoque conocido de cada fotograma, por lo que podría hacer algo como:

(add-function :after after-focus-change-function (lambda () (unless (frame-focus-state) (save-some-buffers t))))

Tenga en cuenta que frame-focus-state devuelve nil cuando el fotograma seleccionado no está enfocado.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım