2013-11-02 52 views
1

我看着吉姆·韋裏奇的有關Emacs中使用JavaScript Y組合演講之一,http://v.youku.com/v_show/id_XNDQ4NDY0NjM2.html如何在Emacs在Windows

評估JavaScript的緩衝液(node.js的)(這次報告會是非常相似的,我想,他在2012 RubyConf的使用了紅寶石,而不是JavaScript的.. http://confreaks.com/videos/1287-rubyconf2012-y-not-adventures-in-functional-programming

有一件事我注意到他在緩衝區在Emacs,評估JS(由node.js的一些錯誤封郵件的顯示)通過「Cc v」快捷方式,並將輸出返回到另一個緩衝區。

我想知道是否有一個簡單的指令(在潛入comint /調用過程的詳細信息之前)如何獲得最新的Emacs在Windows上的設置 ...我搜索,但迄今沒有成功。順便說一句,我alreay得到node.exe安裝,並且可以通過「Mx run-js」在Emacs中以交互方式運行REPL,按照文章「setup-emacs-as-a-javascript-editing-環境的樂趣和利潤」(抱歉無法張貼超過2個鏈接...)

感謝,

/熊先生

+0

我不知道在Windows下使用Node.js的使用Emacs的好方法。在沒有Cygwin的情況下使用Emacs是一種非常不愉快的體驗,但Node.js在Cygwin下不起作用,所以你必須選擇兩邊。 – 2013-11-02 16:37:51

+0

我沒有使用Cygwin,而是使用了隨shell和一堆實用程序一起提供的Git windows版本。今天我看看elisp手冊,特別是「37進程」一章,我現在有一些進展...... – bruin

+0

從技術上講,'js-mode'有一個函數'js-send-buffer-and-go',我認爲你在做什麼後,它會將代碼發送到'run-js'啓動的進程。它通常綁定到'C-c C-b'。我之前提到過這些問題,因爲如果在Cygwin上以這種方式運行,獲得Node.js的行爲是不可能的。 – 2013-11-05 14:05:58

回答

1

我定義了以下功能和它的鍵映射。到目前爲止它的工作。

(defun node-js-eval-region-or-buffer() 
    "Evaluate the current buffer (or region if mark-active), 
    and return the result into another buffer, 
    which is to be shown in a window." 
    (interactive) 
    (let ((debug-on-error t) (start 1) (end 1)) 
    (cond 
    (mark-active 
     (setq start (point)) 
     (setq end (mark))) 
    (t 
     (setq start (point-min)) 
     (setq end (point-max)))) 
    (call-process-region 
    start end  ; seems the order does not matter 
    "node"  ; node.js 
    nil   ; don't delete region 
    "node.js"  ; output buffer 
    nil)   ; no redisply during output 
    (message "Region or buffer evaluated!") 
    (setq deactivate-mark t))) ; deactive the region, regardless 

(define-key global-map (kbd "C-c v") 'node-js-eval-region-or-buffer) 

我還有一件事需要挖掘一下:如何自動分割屏幕來顯示輸出緩衝區?我猜這應該不是太困難...

順便說一句,我安裝Git和Node.js的Windows,並複製「node.exe」到Git的「/ bin」目錄中(已經添加到PATH環境中安裝)。

1

安裝JS3模式

則:

(require 'js-comint) 
(setq inferior-js-program-command "node --interactive") 
(setenv "NODE_NO_READLINE" "1") 
;; Use your favorited js mode here: 
(add-hook 'js3-mode-hook '(lambda() 
       (local-set-key "\C-x\C-e" 
         'js-send-last-sexp) 
       (local-set-key "\C-\M-x" 
         'js-send-last-sexp-and-go) 
       (local-set-key "\C-cb" 
         'js-send-buffer) 
       (local-set-key "\C-c\C-b" 
         'js-send-buffer-and-go) 
       (local-set-key "\C-cl" 
         'js-load-file-and-go) 
       ))