2013-07-02 16 views
5

Verileri konsolun iki satırında görüntülemek istiyorum. Her zaman iki çizgiyi güncellemek istiyorum. Bugüne dek ne yaptınKonsolun çeşitli satırlarındaki veriler nasıl güncelleştirilir?

olduğunu -

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); 

bu çözüm ile bariz sorun imleç penceresinin üst gider olmasıdır. Bunu istemiyorum, bunun yerine imlecin bulunduğu anda içeriği göstermesi gerekiyor. Muhtemelen mevcut imleç pozisyonunu önce mantığım içinde almam gerekiyor. Bunu yapmanın bir yolu var mı?

Alternatif ve en çok tercih edilen çözüm

DÜZENLEME aynı şeyi yapabilir bir lib almak olacaktır: yeni hat olmadan günlük bir seçeneği sunar stackoverflow bazı sorular gördük ama bu tam olarak değil istediğim. Birden fazla yeni hat girişini istiyorum.

+0

Sen imleç konumunu elde edebilirsiniz ([bunu gör (] [https://gist.github.com/viatropos/3765464])] ile bash ama pencerelerde çalışmıyor. Bulduğum en kolay çözüm: http://pastebin.com/y69by2QE (ama 'cursorTo (0, 0)') kullanın. –

cevap

0

ncurses'in ben terminali kontrol etmek için kullanılan en güçlü kütüphane, c kütüphanesine bağlanan MSCDEX'ün tarafından mükemmel npm paketi https://npmjs.org/package/ncurses

Ama burada, ihtiyaçlarınız için küçük overkill olduğunu olabilir orada exec izinleri vermek unutmayın, siz download it from gist veya buradan okuyabilirsiniz this gist dayanarak

Ben araya getirdik aşağıdaki kodu örnek adapte, : alternatif çözüm bir bash script kullanarak içerir ama bash betiği ile:

chmod +x cursor-position.sh 

imleç-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); 
}); 
İlgili konular