- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当我编写用于命令行的程序时,我注意到存在一些限制。例如,我无法像 tmux 在分隔窗口中的 Pane 时那样绘制 1 像素粗的水平线或垂直线。我只能向下移动光标,不能像 VI 那样向上移动。如果光标在底部,我无法刷新页面顶部的信息。
所以,当像 tmux 和 vi 这样的程序这样做时,我不得不怀疑它们是否:
每次更新都从上到下绘制屏幕(我认为这不太可能,否则我可以在终端中向上滚动并看到每次重绘)
使用一些在终端中启用图形的库,例如 SDL,我也认为这不太可能。
使用一些我不知道的标准系统调用
或者最后
那么,这些程序如何在看似有限的 shell 中生成如此丰富的 UI?只要答案给我足够的饲料来继续谷歌横冲直撞,我就会很高兴。
我还假设这些程序使用一些通用方法来做这些事情,但如果那是错误的请告诉我。
最佳答案
典型的终端仿真器具有的功能比立即显现的要多得多。
本质上,一个程序只需要输出代表各种命令的短字节序列,例如移动光标(上|下|左|右)、改变颜色、滚动区域、删除区域等。
这些命令通常以转义字符(与您在终端中键入时按 esc 键时生成的字符相同)开头,后跟各种其他字符,具体取决于所需的操作。
了解其工作原理的一个很好的起点是关于 ANSI escape codes 的维基百科文章。
关于linux - tmux、vim、emacs 等如何超越 *nix 终端的 UI 限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31904111/
在 Mac Mountain Lion 上,tmux 通过 Homebrew 安装。 以下某些设置不起作用: setw -g pane-base-index 1 set -g mouse-resize
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我正在编写一个 shell 脚本,用于创建/附加或切换到给定 session ,具体取决于 session 是否位于 tmux 内部以及 session 是否存在。 除了需要在 tmux sessio
我在 iTerm2 中使用 tmux 已经有一段时间了,但我没有使用现在 iTerm2 附带的 tmux 集成。 我开始考虑使用 tmux 集成,因为它允许您在 tmux 中使用 shell 集成。
我正在尝试编写一个可以运行/源代码的脚本,以便 tmux 设置特定的布局并运行命令。我有一些结果。 这是我到目前为止所写的内容: selectp -t 1 splitw -v -p 15 splitw
我写了 this thing每当在运行 session 中创建新窗口时,我都想获取 Python virtualenv activate 脚本。 是否可以? default-command 选项与 s
我想从下到上移动窗口列表。 如果应用程序的状态栏在 tmux 窗口列表上方,我会觉得它很奇怪。 任何提示? 最佳答案 看到这个 answer on Unix & Linux .如果您从 SVN 构建,
我在 gnome 终端内使用 tmux。 当我第一次打开一个窗口(默认大小为 80x24)时,tmux 栏紧贴在窗口的底部。然而,当我最大化终端窗口时,tmux 栏下方会出现一个令人讨厌的大间隙。 m
Tmux 使用 scroll 来查找历史命令,这让我很困扰。如何禁用此功能?我曾尝试使用“设置鼠标”,但它给了我另一个问题。我只想一直禁用我的鼠标,让滚动保留其原始用途。 最佳答案 Tmux 不再有鼠
我刚刚在我的新 MacBook Pro 上安装了 tmux,并且遇到了以下问题。 当我通过命令 tmux new-window 创建一个新窗口时我得到一个与我正在创建的 session 具有相同工作目
我经常同时运行几个 tmux session ,在大多数这些 session 中,我将在一个端口上运行一个本地服务器。我想要的是能够在从 tmux session 分离时自动终止该服务器,并在重新连接
有没有办法重新编号或交换 tmux session ,就像您可以重新编号或交换 tmux 窗口一样?我看不到它的任何命令,并希望在某些 session 之间轻松切换。 最佳答案 它们按名称排序(默认为
tmux 有一个命令模式,可以通过 C-b : 访问我想知道在我的 .tmux.conf 中是否有别名命令的方法像 split-window 这样的文件对于我更常用的东西,例如 vsp在 vim. 我
这样做的天真方法行不通。尝试这个: 启动第一个 tmux session 。 $ export ENVIRONMENT="production" $ tmux 然后您可以在 session 内验证 E
我管理着多台 Linux 机器,其中一些在存储库中的 tmux 版本为 2.1,而另一些的 tmux 版本低于 2.1。我使用鼠标模式,我知道在 tmux 2.1 中,启用鼠标模式的选项已更改为: s
我在 tmux 命令提示符下使用 Backspace 键时遇到问题。退格会删除 tmux 中的前一个字符(如预期的那样),但不会在 tmux 命令提示符下删除。例如,:lists不会删除 's' 字符
刚刚通过 homebrew 安装了 tmux我正在尝试找到系统范围的 tmux 配置文件。手册页指出系统范围的文件应该位于 /etc/tmux.conf ,但由于某种原因,它不在那里。默认在哪里tmu
我在 iTerm2 中使用 tmux。 当我在 bash 中时,使用 Ctrl-L 清除屏幕有效,但在我拖尾服务器日志时不起作用。我该如何解决? 最佳答案 您可以使用 send-keys -R 清除当
我可以设置 tmux 以在进程完成时在非事件窗口中触发警报吗? 例如:我开始了一个漫长的构建过程。我希望在完成时收到通知,而不是每次打印状态时都收到通知。 最佳答案 我很惊讶还没有给出这个答案:您可以
这是this question的后续. 假设我在一个 tmux session 中,我想打印 的名称当前 socket 正在使用。我怎样才能做到这一点? 最佳答案 当前服务器套接字的信息存储在 TMU
我是一名优秀的程序员,十分优秀!