2012-06-26 19 views
8

Chciałbym skonfigurować emacs, aby odtwarzał dźwięk maszyny do pisania podczas wpisywania tekstu do bufora, a także dźwięk powrotu karetki po naciśnięciu klawisza Enter (podobnie jak w edytorze Q10 w oknach). Czy ktoś ma jakieś sugestie, jak mogę to zrobić? Czy mogę użyć haka?Dźwięki maszyn do pisania dla emacs

Obecnie używam aquamacs i emacs 22, ale nie mam nic przeciwko ulepszaniu.

EDIT: W przypadku gdy ktoś jest zainteresowany, wersja vim tej kwestii został poproszony tutaj: How can I make VIM play typewriter sound when I write a letter?

Odpowiedz

10

Najpierw trzeba ustalić jakiś sposób, aby odtworzyć dźwięk:

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

... nie działa na przykład na Mac OSX Emacs, ponieważ nie jest skompilowany z obsługą dźwięku. Istnieją jednak obejścia, patrz na przykład http://www.emacswiki.org/emacs/ErcSound

  • Następnie można użyć porady na każdym Emacsen

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

    Można również doradzić newline-and-indent.

  • Na Emacs24 masz teraz post-self-insert-hook

    (add-hook 'post-self-insert-hook 'play-typewriter-sound) 
    
  • Jeśli nie podoba defadvice można użyć post-command-hook i sprawdzić nazwę this-command tam:

    (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

Dzięki, to wspaniała odpowiedź. Odkryłem, że jednym ze sposobów grania na mac jest wywoływanie narzędzia 'afplay' za pomocą' start-process-shell-command'. –

+0

W tym przypadku wygląda na to, że warto byłoby zaglądać do kompilacji Emacsa z obsługą dźwięku. Wtedy możesz podać szum maszyny do pisania w formacie sznurka (patrz 'C-h C-i g (elisp) Sound Output') i pozwolić Emacsowi na odtworzenie go bez potrzeby uzyskiwania dostępu do systemu plików lub zewnętrznego procesu za każdym razem. – phils

1

Jeśli ktoś potrzebujesz tego używając afplay tutaj czego używam

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