- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个需要允许终端交互的 C 程序。我已经尝试了好几天,试图让退格键正常工作。
在我的程序中,我轮询来自终端的输入。当我检测到输入时,我检查按下的键是否是退格键:
if((letter == 8 || letter == 127) && cursorPosition >= 1)
cursorPosition
保存光标在终端上的当前位置。我执行此检查是为了确保不允许用户删除我的提示,即 >
。
然后,一旦检查通过,我使用以下代码将光标向后移动并删除字符:
serial_print("\033[1D");
serial_print("\033[K");
serial_print 是我定义的函数,因为此代码是我正在编写并使用 qemu 运行的操作系统的一部分。我无权访问 c printf,因此我使用串行端口进行终端的输入/输出。已知该函数可以正常工作。
本质上,我的思考过程是第一行应该将光标向左移动一列,第二行应该删除光标右侧的所有内容。
直到我在终端的行中输入 3 个或更多字符之前,该功能都可以正常工作。
当我有一个角色时: 1
然后按退格键,我得到:
当输入两个字符时,我也能正常工作。但是,如果我有三个字符: 123
然后按三次退格键,该行如下所示: 123
如果我有六个字符:123456
按退格键 6 次后:123456454
我很困惑,因为终端解释转义序列的方式似乎根据当前行上的字符数量而变化。我正在 Mac 上的 VirtualBox 中运行 Ubuntu 16.04,并使用 qemu 运行我在 Ubuntu 终端中编写的操作系统(如果该信息有任何区别的话)。
有人知道这可能是什么原因造成的吗?另外,我仍然在这里掌握它的窍门,因此如果您需要更多信息或者我做错了什么,请告诉我。
最佳答案
您可能遇到“cursorPosition”问题。试试这个:
if (letter == 8 || letter == 127) {
if (cursorPosition >= 1) {
serial_print("\033[1D");
serial_print("\033[K");
--cursorPosition;
}
} else if (letter >= 32 && letter <= 126) {
serial_print_char (letter);
++cursorPosition;
}
关于c - VT100 转义码从 C 程序中移动光标,行为怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41843318/
我不明白为什么有两段代码要做完全相同的事情,却在 Scala 中做不同的事情。 第一个例子: scala> val ggg = Source.fromFile("/somefile"); ggg: s
您认为以下结果如何? SELECT CHARINDEX('space and /* comment */', 'Phrase with space and /* comment */') AS Mat
我正在尝试为单元测试创建带有某些修饰符的 MouseEvent。我使用的是 J2SE,以下代码无法通过: public void testMouseEventProblem() { Mouse
为什么输出0而不是1? System.out.println((int) (Math.ceil(1/2))); 虽然这个正确输出 1 System.out.println((int) (Math.ce
如果我运行这段代码: var a = new Float32Array(3); a[0] = 1; a[1] = 1.1; a[2] = 1.00001; 我得到了a的结果: [1, 1.100000
今天刚开始使用“UIRefreshControl”,发现了一些奇怪的事情。 如果我在 InterfaceBuilder 中创建了 UIRefreshControl,并将其连接起来,我的选择器将永远不会
这是一个非常简单的问题,但是 PHP 文档没有解释为什么会这样。 我有这个代码: var_dump($newattributes); var_dump($oldattributes); var_dum
如果我通常加载一个 UITabBarController 并在 View 之间切换,它会调用每个 View Controller 的 viewWillAppear。但事实并非如此。 我想在触摸另一个标
我有一个关于 setContentOffset 的奇怪问题,我似乎无法解决:我正在尝试构建一个“无尽”的 ScrollView ,所以我想在某个位置重置内容偏移量。使用下面的代码,setContent
这个把我难住了。 我有一个 java.sql.ResultSet,我正在从中提取字符串值,如下所示: address.setAddressLine1(rs.getString("AddressLine
...至少对我来说。这段代码曾经工作得很好。我很确定什么都没有改变,但现在突然间它的行为变得奇怪了。基本上我正在尝试创建内联编辑功能。当用户单击该链接时,它会动态生成一个文本框以及一个确认和取消链接。
我在 ldd 中遇到了以下奇怪的情况 $ sudo ldd ./monit not a dynamic executable $ readelf -d monit Dynamic sectio
我的 app.config 文件发生了一件奇怪的事情。我的 ConnectionStrings 部分包含以下内容: 但是,当我通过 ConfigurationManager.Connecti
CSS 不是我的强项,我不确定我的列表项在 IE6 中发生了什么。我希望它们垂直对齐,但第一个列表项总是被向右推一两个像素,因此它不再与列表中的其他成员对齐。就我而言,此列表在 IE7/8、FF3 和
制作了一个网络作品集。我的名字周围有联系方式。文本的初始宽度为 0,当鼠标悬停时,图标会随着“过渡”属性展开。左边的图标工作正常,但右边的图标过渡很奇怪,尤其是手机。 http://jsfiddle.
发生的事情是我遵循了这个demo ,我修改了它以满足我的需要,让它工作,将其更改为使用函数绘制两个图形,但现在使用 plt.show() 或 plt 根本不起作用。 savefig() 这是我的代码
我正在尝试编写一个从整数中提取最低阶数的函数。例如: > 24689.lowest_order => 9 到目前为止我有: class Integer def lowest_order I
不确定这是包中的错误还是由于其他原因,但我们开始吧。 我正在使用以下包在相似性分数的对称矩阵(大小为 10x10)上查找最大特征值及其对应的特征向量: scipy.sparse.linalg.eige
我正在尝试实现一个名为“inet_pton”的函数,它将 IPv4 或 IPv6 的字符串表示形式(如“66.102.1.147”[google])转换为二进制网络字节有序形式。这是我的代码的相关部分
比较 float 。根据第一个代码块,5 大于 37.66。第二个 block 声称 5 小于 37.66。 toFixed() 对这些使第一个 block 按照它的方式使用react的是什么? (这
我是一名优秀的程序员,十分优秀!