2011-11-22 19 views
2

我正在編寫一個簡單的命令行工具,以允許命令行輸入到node.js服務器。 我想製作一個緩衝區,這樣用戶可以按下並查看最後一條命令。要做到這一點我已經設置檢測keypress事件中的輸入node.js rawmode

require('tty').setRawMode(true); 

,並檢測所有按鍵:

process.stdin.on('keypress', function (letter, key) { 
    if (key && key.ctrl && key.name == 'c') { 
     process.exit(); 
    } else if (key && key.enter) { 
     write(letter); 
     msgFired(buffer[bufferPos]); 

     bufferPos += 1; 
     buffer[bufferPos] = ""; 
    } else { 
     write(letter); 
     buffer[bufferPos] += letter; 
    } 
}); 

這不檢測進入壓力機。

有沒有一種方法來檢測整個行何時觸發(如RawMode爲false時)與按鍵事件一起?如果不是,我如何檢測enter-press?

回答

2

據我所看到的,你唯一的錯誤是這樣的:

else if (key && key.enter) { 

應該是這樣的:

else if (key && key.name == 'enter') { 
+0

是的,我想通了。由於8小時規則,我無法發佈自己的解決方案......無論如何,謝謝! – JPuge

1

我已經找到了自己的解決方案。要檢查輸入,相應的測試:

if (key && key.name == 'enter') 

這裏是工作的相當不錯的解決方案:

var allowedKeys = "abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ1234567890!- "; 
process.stdin.on('keypress', function (letter, key) { 
    if (key && key.ctrl && key.name == 'c') { 
     listen = false; 
     log(""); 
     process.exit(); 
    } else if (key && key.name == 'enter') { 
     write('\n'); 
     msgFired(buffer[bufferPos]); 

     buffer[bufferPos] = ""; 
    } else if (allowedKeys.indexOf(letter) != -1) { 
     write(letter); 
     buffer[bufferPos] += letter; 
    } 
}); 

的鍵名(key.name)是相當容易猜到。標籤是「標籤」,進入被「ENTER」鍵,向上箭頭是「向上」等

我希望這是有幫助的人......

編輯:請注意,我說允許的字符列表,所以代碼不會像奇怪的字符ctrl + 3崩潰。