2012-06-26 46 views
8

Tôi muốn thiết lập emacs để nó phát âm thanh đánh máy khi gõ văn bản vào bộ đệm, cũng như âm thanh trả về khi nhấn enter (tương tự như trình chỉnh sửa Q10 trên cửa sổ). Có ai có bất cứ đề nghị nào về cách tôi có thể đi về việc này không? Có một cái móc mà tôi có thể sử dụng?Máy đánh chữ âm thanh cho emacs

Tôi hiện đang sử dụng aquamac và emacs 22, nhưng không chống lại việc nâng cấp.

EDIT: Trong trường hợp có ai quan tâm, phiên bản vim của câu hỏi này đã được hỏi ở đây: How can I make VIM play typewriter sound when I write a letter?

Trả lời

10

Trước tiên, bạn phải thiết lập một số cách để chơi âm thanh:

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

... không làm việc trên Mac OSX Emacs ví dụ vì nó không được biên dịch với hỗ trợ âm thanh. Có cách giải quyết tuy nhiên, xem ví dụ http://www.emacswiki.org/emacs/ErcSound

  • Sau đó, bạn có thể sử dụng những lời khuyên trên bất kỳ Emacsen

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

    Bạn cũng có thể tư vấn cho newline-and-indent.

  • On Emacs24 bây giờ bạn có post-self-insert-hook

    (add-hook 'post-self-insert-hook 'play-typewriter-sound) 
    
  • Nếu bạn không thích defadvice bạn có thể sử dụng post-command-hook và kiểm tra tên của this-command có:

    (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

Cảm ơn, đó là câu trả lời tuyệt vời. Tôi đã tìm ra một cách để phát âm thanh trên máy mac là gọi tiện ích 'afplay' bằng cách sử dụng' start-process-shell-command'. –

+0

Đối với trường hợp sử dụng này, có vẻ như biên dịch Emacs với hỗ trợ âm thanh sẽ đáng để xem xét. Sau đó, bạn có thể cung cấp nhiễu máy đánh chữ của bạn ở định dạng chuỗi (xem 'C-h C-i g (elisp) Đầu ra âm thanh ') và có Emacs phát nó mà không cần phải truy cập vào hệ thống tập tin hoặc một quá trình bên ngoài mỗi lần. – phils

1

Nếu ai đó cần điều này bằng cách sử dụng afplay tại đây tôi sử dụng số

(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") 
Các vấn đề liên quan