2013-07-02 23 views
5

Tôi muốn hiển thị dữ liệu trên hai dòng của bảng điều khiển. Tôi chỉ muốn cập nhật hai dòng mỗi lần.Cách cập nhật dữ liệu trên nhiều dòng bàn điều khiển

Những gì tôi đã làm cho đến bây giờ là -

var _logInline = function(alpha, bravo) { 
    process.stdout.cursorTo(0, 0); 
    process.stdout.clearLine(); 
    process.stdout.cursorTo(0); 
    process.stdout.write(alpha.toString()); 
    process.stdout.write('\n'); 
    process.stdout.clearLine(); 
    process.stdout.cursorTo(0); 
    process.stdout.write(bravo.toString()); 
    process.stdout.write('\n'); 

}; 

var delay = 1000; 
var time = 0; 
setInterval(function() { 
    time++; 
    _logInline('alpha-' + time, 'bravo-' + time * time); 
}, delay); 

Các vấn đề rõ ràng với giải pháp này là con trỏ đi vào phía trên cùng của cửa sổ. Tôi không muốn điều đó, thay vào đó nó sẽ hiển thị nội dung mà con trỏ hiện đang ở thời điểm này. Có lẽ tôi cần phải có được vị trí con trỏ hiện tại đầu tiên trong logic của tôi. Có cách nào làm được việc này không?

Alternative và giải pháp ưa thích nhất sẽ được để có được một lib mà có thể làm điều tương tự

EDIT: Tôi đã thấy một số câu hỏi về stackoverflow mà đưa ra một tùy chọn đăng nhập mà không cần dòng mới nhưng điều này là không chính xác những gì tôi muốn. Tôi muốn nhiều lần đăng nhập không có dòng mới.

+0

Bạn có thể có được vị trí con trỏ ([xem cái này gist] (https://gist.github.com/viatropos/3765464)) với bash nhưng không hoạt động trong cửa sổ. Giải pháp đơn giản nhất tôi đã tìm thấy: http://pastebin.com/y69by2QE (nhưng sử dụng 'cursorTo (0, 0)'). –

Trả lời

0

ncurses là thư viện mạnh mẽ nhất mà tôi đã sử dụng để kiểm soát các thiết bị đầu cuối, có một gói NPM tuyệt vời bởi mscdex mà liên kết với các thư viện c https://npmjs.org/package/ncurses

Nhưng có thể đó là chút quá mức cần thiết cho nhu cầu của bạn, đây là một giải pháp thay thế nhưng nó liên quan đến việc sử dụng tập lệnh bash:

Dựa trên this gist Tôi đã đặt mã sau đây phù hợp với ví dụ của bạn, bạn có thể download it from gist hoặc đọc ở đây, đừng quên cấp quyền cho exec bash script với:

chmod +x cursor-position.sh 

con trỏ-position.js

module.exports = function(callback) { 
    require('child_process').exec('./cursor-position.sh', function(error, stdout, stderr){ 
    callback(error, JSON.parse(stdout)); 
    }); 
} 

cursor-position.sh

#!/bin/bash 
# based on a script from http://invisible-island.net/xterm/xterm.faq.html 
# http://stackoverflow.com/questions/2575037/how-to-get-the-cursor-position-in-bash 
exec < /dev/tty 
oldstty=$(stty -g) 
stty raw -echo min 0 
# on my system, the following line can be replaced by the line below it 
echo -en "\033[6n" > /dev/tty 
# tput u7 > /dev/tty # when TERM=xterm (and relatives) 
IFS=';' read -r -d R -a pos 
stty $oldstty 
# change from one-based to zero based so they work with: tput cup $row $col 
row=$((${pos[0]:2} - 1)) # strip off the esc-[ 
col=$((${pos[1]} - 1)) 
echo \{\"row\":$row,\"column\":$col\} 

index.js

var getCursorPosition = require('./cursor-position'); 

var _logInline = function(row, msg) { 
    if(row >= 0) row --; //litle correction 
    process.stdout.cursorTo(0, row); 
    process.stdout.clearLine(); 
    process.stdout.cursorTo(0, row); 
    process.stdout.write(msg.toString()); 
}; 

var delay = 1000; 
var time = 0; 

//Start by getting the current position 
getCursorPosition(function(error, init) { 
    setInterval(function() { 
     time++; 
     _logInline(init.row, 'alpha-' + time); 
     _logInline(init.row + 1, 'bravo-' + time * time); 
    }, delay); 
}); 
Các vấn đề liên quan