2012-06-26 24 views
8

Me gustaría configurar emacs para que reproduzca sonidos de máquina de escribir al escribir texto en el búfer, así como un sonido de retorno de carro al presionar enter (similar al editor Q10 en Windows). ¿Alguien tiene alguna sugerencia sobre cómo podría hacer esto? ¿Hay un gancho que pueda usar?Sonidos de máquina de escribir para emacs

Actualmente uso aquamacs y emacs 22, pero no estoy en contra de la actualización.

EDIT: En caso de que a alguien le interesa, se solicitó a la versión vim de esta pregunta aquí: How can I make VIM play typewriter sound when I write a letter?

Respuesta

10

Primero debe establecer alguna manera de reproducir sonido:

(defun play-typewriter-sound() 
     (let ((data-directory "~/Dowloads/Sounds")) 
     (play-sound `(sound :file "key1.wav")))) 

... no trabajar en Mac OSX Emacs, por ejemplo, ya que no está compilado con soporte de sonido. Hay soluciones, sin embargo, ver por ejemplo http://www.emacswiki.org/emacs/ErcSound

  • A continuación, puede utilizar asesoramiento sobre cualquier Emacsen

    (defadvice self-insert-command (after play-a-sound activate) 
        (play-typewriter-sound)) 
    

    También puede aconsejar newline-and-indent.

  • En Emacs24 ahora tiene post-self-insert-hook

    (add-hook 'post-self-insert-hook 'play-typewriter-sound) 
    
  • Si no te gusta defadvice puede utilizar post-command-hook y compruebe el nombre de this-command allí:

    (add-hook 'post-command-hook #'play-typewriter-sound-maybe) 
    
    (defun play-typewriter-sound-maybe() 
        (if (eq this-command 'self-insert-command) 
         (play-typewriter-sound))) 
    
+0

Gracias, esa es una gran respuesta. Descubrí que una forma de reproducir sonido en un mac era llamar a la utilidad 'afplay' usando' start-process-shell-command'. –

+0

Para este caso de uso, parece que vale la pena investigar la compilación de Emacs con soporte de sonido. Luego, podría proporcionar el ruido de su máquina de escribir en formato de cadena (consulte 'C-h C-i g (elisp) Sound Output') y haga que Emacs lo reproduzca sin necesidad de acceder al sistema de archivos o a un proceso externo cada vez. – phils

1

Si alguien necesita esto usando afplay aquí ¿cuál es el uso

(defun play (audio-name) 
    (interactive) 
    (let* (buf (get-buffer-create "playnoise")) 
     (start-process-shell-command 
     "play" buf (concat (format "afplay /Users/foo/audios/%s" audio-name) ".mp3")))) 

(play "wrong") 
Cuestiones relacionadas