成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Nodejs命令行光標(biāo)位置的設(shè)置

Null / 1380人閱讀

摘要:引子很多使用開發(fā)的工具都會(huì)提供一個(gè)命令行操作界面,這些工具在執(zhí)行的過(guò)程中會(huì)實(shí)時(shí)更新執(zhí)行進(jìn)度或數(shù)據(jù)的下載解壓縮進(jìn)度等,例如,這些信息會(huì)再終端的同一行的同一位置顯示,而不是一行一行逐次打印顯示那么其是怎么實(shí)現(xiàn)的有沒有相應(yīng)地模塊提供這個(gè)功能呢嗯,

引子

很多使用nodejs開發(fā)的工具都會(huì)提供一個(gè)命令行操作界面(CLI),這些工具在執(zhí)行的過(guò)程中會(huì)實(shí)時(shí)更新執(zhí)行進(jìn)度或數(shù)據(jù)的下載解壓縮進(jìn)度等,例如10%,20%,30%...
這些信息會(huì)再終端的同一行的同一位置顯示,而不是一行一行逐次打印顯示......
那么其是怎么實(shí)現(xiàn)的?nodejs有沒有相應(yīng)地模塊提供這個(gè)功能呢?

嗯,NodeJS中有的,它就是readline模塊,這個(gè)模塊提供了正行數(shù)據(jù)讀取寫入,終端提示符位置控制等API

實(shí)現(xiàn)的功能

本文章提供一個(gè)樣例代碼,主要說(shuō)明終端提示符位置控制問(wèn)題,把需要注意的點(diǎn)都列在其中了

終端字符顯示寬度問(wèn)題
終端界面能夠顯示的字符區(qū)域大小問(wèn)題
終端當(dāng)前提示符的位置問(wèn)題
終端相同位置上內(nèi)容實(shí)時(shí)更新的問(wèn)題

這些問(wèn)題在樣例中都有涉及及說(shuō)明到

使用nodejs的readline模塊對(duì)命令行控制終端的提示符位置進(jìn)行控制
模擬詢問(wèn)用戶是否啟動(dòng)應(yīng)用
啟動(dòng)應(yīng)用后實(shí)時(shí)更新運(yùn)行進(jìn)度信息從1%~100%,此信息顯示同一行的同一個(gè)位置

代碼實(shí)現(xiàn)
    var readline = require("readline");
    var util=require("util");
    var inputStream=process.stdin;
    var outputStream=process.stdout;
    var rl = readline.createInterface({
        input: inputStream,
        output: outputStream,
        terminal:true
    });
    var promptStr="MyApp> ";
    
   
    //獲得字符串實(shí)際長(zhǎng)度,中文2,英文1
    //控制臺(tái)中中文占用2個(gè)英文字符的寬度
    var getDisplayLength=function(str) {
        var realLength = 0, len = str.length, charCode = -1;
        for (var i = 0; i < len; i++) {
            charCode = str.charCodeAt(i);
            if (charCode >= 0 && charCode <= 128) realLength += 1;
            else realLength += 2;
        }
        return realLength;
    };
    
   
    //計(jì)算一個(gè)字符串在當(dāng)前控制臺(tái)中占用的行數(shù)和列數(shù)信息
    //outputStream.rows及outputStream.columns屬性為當(dāng)前控制臺(tái)的顯示的窗口的大寫
    var getStrOccRowColumns=function(str){
        //str=promptStr+str;
        var consoleMaxRows=outputStream.rows;
        var consoleMaxColumns=outputStream.columns;
        var strDisplayLength=getDisplayLength(str);
        var rows=parseInt(strDisplayLength/consoleMaxColumns,10);
        var columns=parseInt(strDisplayLength-rows*consoleMaxColumns,10);
    
        return {
            rows:rows,
            columns:columns
        }
    
    };
    
    //console.log(getDisplayLength(promptStr));
    rl.setPrompt(promptStr);
    rl.prompt();
    
    rl.question("你想要個(gè)啟動(dòng)應(yīng)用處理嗎?", function(answer) {
        rl.prompt();
        rl.write(util.format("啟動(dòng)應(yīng)用得到的回復(fù)為:%s
", answer));
        //更新同一個(gè)位置顯示的字符信息,每1秒更新1一次,一直到100%
        var k= 0,max=100,prevOutputContent,outputContent,
        cursorDx=0,cursorDy= 0,dxInfo;
        //計(jì)算
        rl.prompt();
        var interval=setInterval(function(){
            if(k           
               
                                           
                       
                 

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86031.html

相關(guān)文章

  • Linux快速學(xué)習(xí)-vi編輯器常用命令

    摘要:級(jí)版目錄進(jìn)入退出三種模式光標(biāo)移動(dòng)文本修改查找替換設(shè)置環(huán)境進(jìn)入退出進(jìn)入命令示例說(shuō)明進(jìn)入編輯器,類似于打開文本編輯器軟件用編輯器打開文件 ?級(jí)版 目錄1. 進(jìn)入退出2. 三種模式3. 光標(biāo)移動(dòng)4. 文本修改5. 查找替換6. 設(shè)置環(huán)境1. 進(jìn)入退出進(jìn)入命令示例說(shuō)明vi進(jìn)入vi編輯器,類...

    stormzhang 評(píng)論0 收藏0
  • linux下vi使用筆記

    摘要:按屏幕往后移動(dòng)半頁(yè)。按移動(dòng)到光標(biāo)所在行的行首按光標(biāo)跳到下個(gè)字的開頭按光標(biāo)跳到下個(gè)字的字尾按光標(biāo)回到上個(gè)字的開頭按光標(biāo)移到該行的第個(gè)位置,如。例如,,表示移動(dòng)光標(biāo)至文章的第行行首。 01:查找和替換 例1:要找about字符串 /about 在命令行輸入/后接要查找的字符串,下一個(gè)匹配按n(ext),上一個(gè)是N?about 在當(dāng)前位置找,n跳到前一個(gè)匹配/about$ 匹配行尾的a...

    Awbeci 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<