2012-06-26 15 views
8

我想设置emacs,以便在向缓冲区中输入文本时播放打字机的声音,以及按下回车时的回车声音(类似于Windows上的Q10编辑器)。有没有人有任何建议,我可以如何去做这件事?有没有可以使用的钩子?emacs的打字机声音

我目前使用aquamacs和emacs 22,但我不反对升级。

编辑:如果有人有兴趣,这个问题的vim的版本是在这里问:How can I make VIM play typewriter sound when I write a letter?

回答

10

首先,你必须建立某种方式来播放声音:

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

...不例如在Mac OSX Emacs上工作,因为它没有编译声音支持。有解决办法,虽然,例如参见http://www.emacswiki.org/emacs/ErcSound

  • 然后,您可以在任何的emacsen

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

    使用建议你也可以建议newline-and-indent

  • 在Emacs24你现在有post-self-insert-hook

    (add-hook 'post-self-insert-hook 'play-typewriter-sound) 
    
  • 如果你不喜欢defadvice可以使用post-command-hook和检查的this-command有名称:

    (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

谢谢,这是一个很好的答案。我想出了一种在Mac上播放声音的方法,就是使用'start-process-shell-command'调用'afplay'工具。 –

+0

对于这个用例,这听起来像编译Emacs的声音支持值得研究。然后,您可以以字符串格式提供您的打字机噪音(请参阅'C-h C-i g(elisp)声音输出),并让Emacs播放它,而无需每次访问文件系统或外部程序。 – phils

1

如果有人需要这个使用afplay这里什么我使用

(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")