我正在尝试使用以下代码检索VT100终端中光标的坐标:
void getCursor(int* x, int* y) {
printf("\033[6n");
scanf("\033[%d;%dR", x, y);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下ANSI转义序列:
设备状态报告 - ESC [6n
将光标位置报告给应用程序(就像键入键盘一样)ESC [n; mR,其中n是行,m是列.
代码编译并发送ANSI序列,但是,在接收到它之后,终端将^[[x;yR字符串打印到stdout而不是stdin使我无法从程序中检索它:

显然,字符串是为程序指定的,所以我必须做错误的事情.有人知道它是什么吗?
我知道可以将某些程序设置为在某些工作空间中生成,如下所示:
myManageHook = composeAll
[ classname =? "XTerm" --> doShift "3" ]
main = xmonad $ defaultConfig
{ manageHook = myManageHook <+> manageHook defaultConfig }
Run Code Online (Sandbox Code Playgroud)
这样所有的实例Xterm都会在工作区"3"中产生.我想要做的是让所有新程序在工作区中产生,它们在启动时处于焦点,例如,如果我在工作区"1"并启动firefox,则快速切换到工作区"2" ,firefox窗口将保留在工作区"1".
我正在想一些有效的东西
import qualified XMonad.StackSet as W
myManageHook = composeAll
[ classname =? ".*" --> doShift currentTag ]
main = xmonad $ defaultConfig
{ manageHook = myManageHook <+> manageHook defaultConfig }
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,但希望你能得到这个想法.
我的问题与意图中的这个问题非常相似,但是我希望所有程序都在最初聚焦的工作区中产生,但是我打开它们(dmenu,从终端等)
我正在运行 qemu
-串行 pty
选项,qemu 给出了这个消息
字符设备重定向到/dev/pts/1
但是,它不会生成新窗口,我可以cat从不同的窗口对 pts1 执行操作,但随后我无法向其中输入任何字符。
无论如何,你可以启动一个具有特定点数的新 xterm 吗?
每次我运行python或python3使用交互式控制台时,提示的显示几乎在第一次或第二次交互后几乎立即失去同步:
>>> [1,2,3]
>>> [1, 2, 3]
print('hi')
>>> hi
Run Code Online (Sandbox Code Playgroud)
然后,当我退出python时,这种行为会延续到bash,另外当你输入时,屏幕上什么都没有出现,但它仍会运行.在以下示例中,我键入date然后history | tail -n3:
$ Thu Oct 8 07:55:47 CEST 2015
$ 488 python
489 date
490 history | tail -n3
Run Code Online (Sandbox Code Playgroud)
但是,打字后reset,一切都恢复正常.
不用说,这种行为非常烦人.原因是什么,我该如何解决?
我在OS X上.使用iTerm或内置的Terminal.app都会产生相同的行为.我的python构建来自macports.这个问题不存在/usr/bin/python(OS X中包含的python 2.7.2).
============================
编辑:如果我使用zsh,那么python仍然有问题,但在zsh退出python之后一切正常.
$TERM是xterm-256color在这两个bash和zsh.
我正在尝试使用 Websocket 执行 kubernetes pod,根据 kubernetes 文档,它可以通过传递承载 THETOKEN来实现
当使用来自 http 客户端的承载令牌身份验证时,API 服务器需要一个值为 Bearer THETOKEN 的 Authorization 标头
下面是wscat将 Header Value 传递--header "Authorization: Bearer $TOKEN"给 pod 建立 exec 并且连接成功的示例
/ # wscat --header "Authorization: Bearer $TOKEN" -c "wss://api.0cloud0.com/api/v1/namespaces/ba410a7474380169a5ae230d8e784535/pods/txaclqhshg
-6f69577c74-jxbwn/exec?stdin=1&stdout=1&stderr=1&tty=1&command=sh"
Run Code Online (Sandbox Code Playgroud)
但是当涉及到来自 Web 浏览器的Websocket API连接时
如何根据文档在 web Socket 中传递这个 Beaer Token 没有传递自定义标头的标准方法
在 API 查询中尝试了 URI 查询参数access_token= Bearer TOKEN它不起作用并且身份验证被 403 拒绝
wss://api.0cloud0.com/api/v1/namespaces/ba410a7474380169a5ae230d8e784535/pods/txaclqhshg-%206f69577c74-jxbwn/exec?stdout=1&stdin=1&stderr=1&tty=1&command=%2Fbin%2Fsh&command=-i&access_token=$TOKEN
Run Code Online (Sandbox Code Playgroud) 我想在Python应用程序中运行一个xterm兼容的虚拟终端.我需要在其中运行基于ncurses的应用程序,使用用户的输入提供它并读取其输出.
到目前为止,我已经找到了python-vte,但它只提供了一个GTK +小部件(libvte具有所需的VtePty类,但Python绑定没有)并且具有不可接受的libgtk依赖性.
有没有其他方法可以在Python中执行终端仿真?
如果我用xterm调用一个命令(在我的情况下是另一个脚本),如下所示:
xterm -e sh second.sh
Run Code Online (Sandbox Code Playgroud)
$?xterm返回后的值是xterm的退出状态代码(通常为我0)而不是我的脚本.
反正有没有得到我的脚本的退出状态代码?
我喜欢终端的 grc 着色器。但是,我必须明确地为我想要着色的任何内容添加前缀:
grc --config=conf.mine
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让它自动应用于您在命令行上输入的所有内容(这样我可能甚至不需要知道 grc 是什么)?如果不存在更好的替代方案,也许使用 shell 钩子?
我很懒,而且我更喜欢计算机为我完成工作。我每天都会通过 ssh 连接到多台机器,因此我创建了一个简单的脚本来启动一些 xterm 窗口并将它们放置在我想要的位置(如您所见,我正在使用 bash):
#!/bin/bash
xterm -geometry 80x27+1930+0 &
xterm -geometry 80x27+2753+0 &
xterm -geometry 80x27+1930+626 &
xterm -geometry 80x27+2753+626 &
Run Code Online (Sandbox Code Playgroud)
但是,我接下来要做的就是转到第一个窗口并输入
ssh server_a
Run Code Online (Sandbox Code Playgroud)
然后在第二个
ssh server_b
Run Code Online (Sandbox Code Playgroud)
等等。我想做的是让我的脚本在每个 xterm 窗口中执行 ssh 命令,然后让窗口保持打开状态以供我完成工作。我已经看到 xterm 的 -e 选项,但是在执行命令后窗口会关闭。有没有办法做到这一点?
如果这是一个重复的问题,我深表歉意。我四处寻找,但没有任何运气。非常感谢!
我的.bashrc中有以下行:
set -o vi
Run Code Online (Sandbox Code Playgroud)
当我处于插入模式时,我希望我的光标具有管道形状,当我处于命令模式时,我希望我的光标具有块形状,就像我在Vim中将以下内容放在我的.vimrc中一样:
let &t_SI = "\e[6 q"
let &t_SR = "\e[4 q"
let &t_EI = "\e[2 q"
Run Code Online (Sandbox Code Playgroud)
除非在这种情况下,我希望在命令行上具有等效行为.
我在这里找到了我的问题的部分答案 - https://unix.stackexchange.com/questions/22527/change-cursor-shape-or-color-to-indicate-vi-mode-in-bash - 由@gogolb撰写.
这是答案,复制:
#!/bin/bash
# Script "kmtest.sh"
TEST=`bind -v | awk '/keymap/ {print $NF}'`
if [ "$TEST" = 'vi-insert' ]; then
echo -ne "\033]12;Green\007"
else
echo -ne "\033]12;Red\007"
fi
export PS1="\u@\h \$(kmtest.sh)> "
Run Code Online (Sandbox Code Playgroud)
不幸的是,正如答案中所解释的那样,示例脚本仅在回车后更改光标形状,而我想要的是当我点击<Esc>时(即当我更改模式时)光标形状会改变.
我在Linux上运行本机终端应用程序,使用Bash 4.4.7和我的$ TERM变量设置为xterm-256color.另外,我不知道tmux对我要求的是否有任何影响,但理想情况下,我希望该解决方案能够在tmux会话内部和外部工作.
解
我自己最终发现了这个问题的答案,我在另一个问题中描述了这个问题:
如何正确地将修补后的GNU readline库链接到所有现有程序?
别担心,该解决方案不需要任何修补.;)