使用 ncurses pad 在 C 中滚动

2023-12-04

我试图在 ncurses 中获取一个窗口,在其中写入 mysql 查询的结果。但查询返回的行数比我终端中的行数多。 所以我尝试创建一个垫子,以便我可以滚动浏览结果。

但问题是,我的终端上没有可见的键盘。

我只是简化了代码,但它仍然不适合我:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <ncurses.h>
#include <mysql.h>
#include <my_global.h>

WINDOW *pad;
MYSQL *con;

static int mrow, mcol;
static char *host, *user, *pass;

void quit(void)
{
  // close MySQL connection
  mysql_close(con);
  // end curses
  endwin();
}


int main(int argc, char **argv)
{
  // initialize curses
  initscr();
  atexit(quit);
  clear();
  cbreak();
  keypad(stdscr, TRUE);
  start_color();

  // get terminal size
  getmaxyx(stdscr, mrow, mcol);

  // open MySQL connection
  host = "localhost";
  user = "root";
  pass = "8$oP.4L!";
  con = mysql_init(NULL);
  if (con == NULL)
  {
    exit(1);
  }
  if (mysql_real_connect(con, host, user, pass, NULL, 0, NULL, 0) == NULL)
  {
    mysql_close(con);
    exit(1);
  }

  // Cursor off
  curs_set(0);

  // Get SQL Data
  char *query = "SELECT IF((SELECT name FROM zeiterf.stdjobs WHERE nr = zeiterf.wtime.job) != '', (SELECT name FROM zeiterf.stdjobs WHERE nr = zeiterf.wtime.job), job), IF(usr != '', (SELECT vname FROM zeiterf.user WHERE nr = zeiterf.wtime.usr), NULL), IF(usr != '', (SELECT nname FROM zeiterf.user WHERE nr = zeiterf.wtime.usr), NULL), SEC_TO_TIME(SUM(TIME_TO_SEC(tout) - TIME_TO_SEC(tin))) FROM zeiterf.wtime WHERE tout != 0 AND job != '...ENDE' GROUP BY job , usr WITH ROLLUP;";
  if (mysql_query(con, query))
  {
    exit (1);
  }

  MYSQL_RES *result = mysql_store_result(con);
  MYSQL_ROW *row;
  int num_fields = mysql_num_fields(result);
  int rowcount = mysql_num_rows(result);

  // create pad
  pad = newpad (rowcount + 1, mcol);

  // col titles
  wprintw(pad, "Auftrag \tName \t\t\tZeit\n");

  while (row = mysql_fetch_row(result))
  {
    int i = 0;

    for (i = 0; i < num_fields; i++)
    {
      wprintw(pad, "%s\t", row[i]); 
    }

    wprintw(pad, "\n");
  }

  mysql_free_result(result);

  // Show content of pad
  int mypadpos = 0;
  prefresh(pad, mypadpos, mcol, 0, 0, mrow, mcol);

  // wait for exit key
  int ch;
  while((ch = wgetch(pad)) != 'q')
  {
    switch (ch)
    {
      case KEY_UP:
        if (mypadpos >= 0)
    {
      mypadpos--;
    }
    prefresh(pad, mypadpos, mcol, 0, 0, mrow, mcol);
    break;
      case KEY_DOWN:
    if (mypadpos <= rowcount+1)
    {
      mypadpos++;
    }
    prefresh(pad, mypadpos, mcol, 0, 0, mrow-1, mcol);
    break;
     }
  }

  // remove window
  delwin(pad);
  clear();
  refresh();

  return (0);
}

编译为

gcc -o test testpad.c `mysql_config --libs --cflags` -lncurses

在我的 Debian Sid 系统上。还用 raspbian 在我的 RPi 上尝试过。在两个系统上都有相同的行为。

谁能告诉我我做错了什么?


我发现出了什么问题。在我的代码中应该是

prefresh(pad, mypadpos, 0, 0, 0, mrow, mcol);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ncurses pad 在 C 中滚动 的相关文章

  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据

随机推荐

  • 如何在 Google Apps 脚本中使用 AngularJS

    是否可以使用 Angular js 作为使用 Google Apps 脚本中的 HtmlService 提供服务的 Web 应用程序的一部分 我也改变了Code gs文件如下链接所述 如何在 Google Apps 脚本提供的 HTML 网
  • .NET 框架中最安全的哈希算法是什么?

    生成的哈希值的大小和算法的速度并不重要 我真的只对它是最安全的选择感兴趣 我也不想使用任何第三方库 我使用的 NET 框架版本是 3 5 如果这有什么区别的话 我会想SHA512将是内置哈希算法的最佳选择 它是非常安全的算法的最大哈希形式
  • Python 彗星服务器

    我正在构建一个具有实时提要 类似于 Facebook 的新闻提要 的 Web 应用程序 我想通过长轮询机制对其进行更新 据我所知 对于 Python 我的选择几乎是使用 Stackless 从他们的 Comet wsgi 示例构建 或 Co
  • Openpyxl:将背景颜色设置为行和列属性错误

    看了这里的几个例子后 我尝试将背景颜色设置为整行和整列 我已经做好了 import openpyxl from openpyxl styles import PatternFill wb openpyxl load workbook sel
  • 如何在 Go Web-Server 和 Vue.js 前端之间交换数据? http 帖子:404

    我试图了解如何在非常精简的 golang Web 服务器和 vue js 前端之间交换数据 这是 server gorillamux go 文件 package main import encoding json github com go
  • 如何使用反射调用 IDBSet.FirstOrDefault(predicate)?

    给定一个 IDbSet 其中 Person 包含 Id 属性 我通常如何执行以下命令 var p PersonDbSet FirstOrDefault i gt i Id 3 我可以构建谓词 并获取对 FirstOrDefault 扩展方法
  • 使用 Oracle Wallet 从 PHP 连接到 Oracle DB

    是否可以将 PHP 配置为使用安全的外部密码存储 如中所述http download oracle com docs cd B19306 01 network 102 b14266 cnctslsh htm 是的 这是可能的 您需要 1 创
  • ActiveRecord 中的浮点型与小数型

    有时 Activerecord 数据类型让我感到困惑 呃 经常 我永恒的问题之一是 对于特定情况 我应该使用 decimal or float 我经常看到这个链接ActiveRecord 十进制与 浮点 但答案还不够明确 无法让我确定 我见
  • 无法使用命名空间从动态类中获取常量

    我无法从使用字符串变量和 PHP 5 3 定义的类中获取常量 命名空间 例子 use Some Foo Bar class Bar echo class LOCATION 其中 LOCATION 是一个正确定义的常量 我收到的错误表明 Ba
  • 如何以印地语语言以 unicode 形式存储数据

    我在用PHP and MySQL申请 问题是 如何将数据存储在MySQL 可读格式或 format 当用户在文本框中输入数据并单击提交时 我们会获得不同格式的数据 我们需要做什么来转换并存储在MySQL以可读的格式 选择utf8字符集并ut
  • 具有重复标签的ggplot轴自定义顺序

    set seed 357 x lt data frame name sample letters 10 val runif 10 stringsAsFactors F x c 2 6 name lt c k k ggplot x aes x
  • 主要 C/C++ 编译器生成的代码中的寄存器分配规则

    我记得以前 32 位 Intel 处理器之前 的一些规则 当时 至少对我来说 非常频繁地必须分析 C C 编译器 在我的例子中 当时是 Borland Turbo 生成的汇编输出查找性能瓶颈 并将汇编例程与 C C 代码安全地混合 诸如使用
  • 代码签名错误,如何将 Xcode 项目切换到另一台 Mac?

    我知道如何使用 Xcode 和一切 但这是一个初学者问题 我刚刚买了一台新的 MacBook Pro 我专门用它来开发 iPhone 我将主要应用程序项目从 Mac Mini 转移到了 MacBook Pro 这样我就可以在两台设备上工作
  • 如何重新启动一个线程

    我尝试编写一个文件监视器 如果附加了新行 它将检查文件 该监视器实际上是一个线程 它将始终通过随机访问文件读取该行 这是监控核心代码 public class Monitor public static Logger log Logger
  • 如何在 idl 中声明 IStream,以便 Visual Studio 将其映射到 s.w.interop.comtypes?

    我有一个 COM 对象 需要从 C 客户端获取流并对其进行处理 看来我应该使用 IStream 所以我像下面这样写我的idl 然后我使用 MIDL 编译为 tlb 编译我的解决方案 注册它 然后将对我的库的引用添加到 C 项目 Visual
  • C++ 字符串转二进制代码 / 二进制代码转字符串

    我需要将一个字符串转换为带有第一个字符串的二进制代码的字符串 对于第一部分 我使用了这个 将字符串转换为二进制的最快方法 工作完美 但我无法找到将其写入新字符串的方法 这是我到目前为止使用的代码 for size t i 0 i lt ou
  • Python循环遍历字符串并将其与通配符模式匹配

    string1 abc string2 abdabcdfg 我想知道 string1 是否是 string2 的子串 但是 也有通配符 例如 可以是任何字母 y can be a or d x can be b or c 因此 yx 将是子
  • SQL - WHERE 条件的顺序重要吗?

    假使 假设category id是表的索引键 不是主键 books 下面两条SQL语句有什么区别吗 SELECT FROM books WHERE author Bill AND category id 1 SELECT FROM book
  • 如何在 SymPy 中加速缓慢的矩阵乘法?

    我正在编写一个工具来使用 SymPy 求解特定的递推方程 并发现涉及矩阵乘法的步骤之一花费了非常长的时间 例如 如果我在 iPython 控制台中尝试以下操作 In 1 from sympy import In 2 A Matrix 500
  • 使用 ncurses pad 在 C 中滚动

    我试图在 ncurses 中获取一个窗口 在其中写入 mysql 查询的结果 但查询返回的行数比我终端中的行数多 所以我尝试创建一个垫子 以便我可以滚动浏览结果 但问题是 我的终端上没有可见的键盘 我只是简化了代码 但它仍然不适合我 inc