标签: ncurses

如何检查哪些终端定义可用?

大部分问题都在标题中,但要详细说明一下:

在大多数 Linux 上,我可以find /usr/share/terminfo -type f。但是在我附近的 Solaris 机器上 - 这个目录甚至不存在。

我可以遍历终端列表,并执行以下操作:

for TERM in xterm xtermc xterm-color xterm-256color screen rxvt
do
    tput cols >/dev/null 2>/dev/null && echo "$TERM available"
done
Run Code Online (Sandbox Code Playgroud)

但它很慢。发现tput终端定义使用的路径并自己运行“查找”的任何选项?

linux solaris terminal ncurses console

21
推荐指数
2
解决办法
2万
查看次数

交互式 CLI 如何工作?

像 Vim 这样的命令行应用程序如何工作?具体来说,他们如何以他们的方式控制终端?另外,为了将来参考,对于像 Vim 那样控制终端的应用程序是否有一个特定的术语?

vim ncurses tty console

16
推荐指数
1
解决办法
3199
查看次数

从 ncurses 应用程序调用的脚本输出中的转义序列

我目前正在我的家庭服务器上的 tmux 会话中运行 mcabber 作为我的 Jabber 客户端(使用 ncurses)。在本地,我将 iTerm2 作为终端模拟器运行,它支持通过字符转义序列触发咆哮通知。

注意:echo此问题中的所有内容都适用于printf %b, 或echo -e在 bash 和 GNU 中echo

例如,echo "\e]9;foobar\007"使 iTerm2 发送带有文本“foobar”的 Growl 消息。

但是,在 tmux 会话中,转义序列会被吃掉。因此,\Ptmux可以像这样使用专有字符转义序列:

echo "\ePtmux;\e\e]9;foobar\007\e\\"
Run Code Online (Sandbox Code Playgroud)

这会在 tmux 会话中触发咆哮消息。

但是,当我在收到新消息时触发的 mcabber 事件脚本中使用它时,不会触发任何通知,就像将回声发送到错误的终端一样。

我想这与触发脚本的 mcabber 是一个 ncurses 应用程序有关,因此我的普通 bash 脚本的输出丢失了,而 iTerm 2 永远看不到它。

我也尝试调用 smcup 没有成功,然后根据我发现的一些想法进行回应

tput smcup
echo "\ePtmux;\e\e]9;$FROM: $MSG\007\e\\"
tput rmcup
Run Code Online (Sandbox Code Playgroud)

我想这不起作用,因为问题不是切换回“真实终端窗口”,而是更多地将输出定向到 ncurses 窗口。

关于这个有什么想法吗?

shell terminal tmux ncurses escape-characters

15
推荐指数
1
解决办法
2277
查看次数

为什么 bash 链接到 ncurses?

我想我以前已经注意到这一点,但从未想太多;现在我很好奇。

> ldd /bin/bash
        linux-vdso.so.1 =>  (0x00007fff2f781000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f0fdd9a9000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f0fdd7a5000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f0fdd3e6000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f0fddbf6000)
Run Code Online (Sandbox Code Playgroud)

libtinfo 是 ncurses 的一部分。这是一个 Fedora 系统,但它在 ubuntu 上是一样的,我注意到在 raspbian(一个 debian 变体)上它也链接到 libncurses 本身。

这是什么原因?我认为 bash 所做的一切都可以用 libreadline 来完成(奇怪的是,它没有链接到)。这只是一个替代品吗?

bash ncurses readline

12
推荐指数
1
解决办法
2774
查看次数

在终端中检测 shift + keyup/down

我该怎么做呢?我想要一个终端菜单,其中shift+upshift+down选择多行。 ncurses似乎有问题。

我不一定需要高级终端库。我只想处理这个,除此之外,我的 IO 应该非常简单。

有什么建议吗?

terminal ncurses tty

9
推荐指数
2
解决办法
3630
查看次数

为什么END键没有terminfo条目?

在 Debian 系统上END按键生成^[[F

$ showkey -a

Press any keys - Ctrl-D will terminate this program

^[[F     27 0033 0x1b
         91 0133 0x5b
         70 0106 0x46
Run Code Online (Sandbox Code Playgroud)

但是为什么这个键和弦不在terminfo 中

$ infocmp -1 | grep end
kend=\EOF,
Run Code Online (Sandbox Code Playgroud)

尽管如此,ncurses设法正确地将其识别为KEY_END. 如何?

TERMxterm-256color

顺便说一句,拥有kendandend而不仅仅是背后的动机是end什么?(对于khomehome

编辑

正如 Johan Myréen 的评论中所说,khome字符串是按下 Home 键产生的序列。但是在 Debian 上按 Home 键会产生home. 为什么?

$ showkey -a

Press …
Run Code Online (Sandbox Code Playgroud)

termcap terminal ncurses terminfo

9
推荐指数
2
解决办法
1718
查看次数

将 html 表转换为类似 ncurses 的 ascii 表?

我在 html 表中有一些文档。我想将表转换为 ascii 表,就像您在返回 mysql 命令行结果时看到的那样,如下所示:

+------------+------------+
| header     | header     |
+------------+------------+
| cell data  | cell data  |
+------------+------------+
| cell data  | cell data  |
+------------+------------+
Run Code Online (Sandbox Code Playgroud)

...所以我可以将它包含在一些代码注释中。

我怎么能轻松做到这一点?我正在考虑将 lynx 的输出传输到一个文件中,但 lynx 不会在表格周围放置 ascii 边框:P

我还想控制单元格宽度,以便内容单元格不会溢出到代码可接受的屏幕宽度之外。

lynx ncurses shell-script

8
推荐指数
1
解决办法
3589
查看次数

如何在 FreeBSD 上使用 terminfo 条目?

在我的本地 Linux 机器上,我使用的是termite (VTE-based)。它带有自己的terminfo文件(xterm-termite ),默认情况下不随 ncurses 一起分发。

我尝试连接到远程 FreeBSD 服务器。不幸的是,FreeBSD 默认只使用旧的 termcap 格式。我一直无法找到将 terminfo 转换为 termcap 的方法。因此,虽然我可以编译包含来自端口 ( devel/ncurses) 的terminfo 支持的 ncurses 版本,但默认情况下,ncurses 应用程序将链接到系统提供的库。这会导致应用程序无法启动:

$ echo $TERM
xterm-termite
$ toe | grep termite
xterm-termite   VTE-based terminal
$ tmux
open terminal failed: can't find terminfo database
$ htop
Error opening terminal: xterm-termite.
Run Code Online (Sandbox Code Playgroud)

toe列出 terminfo 条目)

如何让 FreeBSD 默认使用 terminfo,或者强制应用程序使用端口提供的 ncurses lib,或者至少将 terminfo 转换为 termcap 数据?

(我知道像设置为一个安全值之类的变通方法,但我认为这违背了 terminfo 的目的)TERMxterm-256color

freebsd ncurses terminfo

8
推荐指数
1
解决办法
3117
查看次数

Suse 11 与 Suse 10 的差异会影响终端颜色吗?

在 github 上有我的 dotfiles版本(其他人的好作品的无耻分支)。在工作中,我将它们放在中央 linux 服务器 (SuSE Enterprise Linux 10) 上。我将它们从中央管理服务器同步到目标服务器(它们通常没有外部 http 访问)。

我们已经推出了 SuSE Enterprise Linux 11,我注意到我的配置文件设置中的“红色”或洋红色 bash 提示颜色在这些服务器上似乎不起作用。同样,我的 vim 颜色方案设置不起作用 - 例如,该词消失而不是搜索词突出显示。红色和黄色不受欢迎。

有人可以指出我在这些 SLES 11 盒子上可能不同的环境变量或设置吗?下面是我的 SLES10 与 SLES11 登录的屏幕截图,点文件同步(例如 .bash_profile、.bash_prompt、.vimrc 等)。

$TERM在两台服务器上都是xterm-256color. **见更新说明

从 SLES10 服务器: vim 会话,sles 10,配色方案获得认可

相同的点文件,但在 SLES11 服务器上: vim 会话,sles 11,配色方案部分兑现

更新

  • 我注意到 $TERM 是不同的,如果我直接从我的工作站与从 SLES10 实用程序服务器 SSH 连接。我相信 TERM 是从实用程序服务器转发的。
  • .bash_prompt初始化脚本集$TERM基础上的输出infocmp这是从ncurses-devel我已经确认包是不是SLES11服务器图像。如果infocmp不运行或不可用,$TERM则保持未设置或脚本运行之前的任何内容
  • $TERM继承(已设置)的事件中,.bash_prompt脚本条件逻辑当前在infocmp …

bash terminal ncurses sles

7
推荐指数
1
解决办法
1467
查看次数

命令行差异工具

所以我们都diff默认安装了命令。我当然不知道如何很好地使用它。但我希望有一些合理的默认用法。但是当我打字时,diff file1 file2我得到了……一个文本……我必须在脑子里解析……这无济于事,因为这是两个文本的奇怪组合,而这两个文本本身又非常复杂。

所以我寻找了一个图形解决方案,例如meld. 开箱即用的效果要好得多。

然而,我更愿意一直保持在命令行上。是否有一个相当标准的命令:

  • 默认使用颜色,可以采用语法高亮
  • 显示并排差异并默认进行 3 路合并
  • 在命令行上工作,例如通过 libncurses
  • 既不依赖于IDE vimemacs也不依赖于IDE
  • 可以就地修改编辑过的文件吗?

如果没有,为什么不呢?我看了看,colordiff但它并没有完全削减它。

command-line programming diff ncurses merge

7
推荐指数
2
解决办法
2471
查看次数