【问题标题】:How to setup pager in dart console如何在飞镖控制台中设置寻呼机
【发布时间】:2022-11-10 10:06:31
【问题描述】:

当许多控制台应用程序中的内容很大时,很流行一次显示每个page 的输出:git log/diff、more/less;但是我该如何在飞镖编程应用程序中做呢?

我在 git diff source code 中找到了一个 setup_pager 方法,但想不通,我需要做一些 linux 编程吗?或启动其他进程以将输出传递给less 命令?谢谢!

【问题讨论】:

    标签: dart output console-application


    【解决方案1】:

    如果它像 more 命令这样简单,则使用控制台包获取终端的行数。

    输入一个从 1 到行数的 for 循环 - 1 在每次迭代时打印一行文本。

    然后提示用户按空格键。

    当他们这样做时,重新启动 for 循环。

    冲洗并重复。

    如果您想向上滚动,那么控制台包就是您的朋友。

    类似的过程,但是当您提示用户询问哪个方向时。

    如果分心,则清除屏幕并打印前一页文本。

    棘手的一点是向后读取文件。

    看看 File 类和 seek 方法。它会让你在文件中向后移动,但你必须自己找到线刹车。

    一个非常粗略的实现:

    #! /usr/bin/env dcli
    
    // ignore: prefer_relative_imports
    import 'dart:math';
    
    import 'package:dcli/dcli.dart';
    
    /// dcli script generated by:
    /// dcli create %scriptname%
    ///
    /// See
    /// https://pub.dev/packages/dcli#-installing-tab-
    ///
    /// For details on installing dcli.
    ///
    void main(List<String> args) {
      // -1 to allow for the 'Hit enter to continue' message
      var rows = Terminal().rows - 1;
    
      final lines = read('/var/log/syslog').toList();
    
      rows = min(lines.length, rows);
    
      var shown = 0;
    
      while (shown < lines.length) {
        for (var row = 0; row < rows; row++) {
          print(lines[shown]);
          shown++;
        }
        ask('Hit enter to continue', required: false);
      }
    
      print(orange('Done'));
    }
    

    【讨论】:

    • 谢谢布雷特,但有没有可用的代码,仍然不知道......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2011-08-02
    相关资源
    最近更新 更多