如何将X11键盘事件像ghostscript一样路由到stdin中?

| 我正在尝试编写ghostscript的副本,但我不知道它们是如何制作的,因此您可以在图形窗口中键入内容,并且击键会显示在终端窗口中,就像您在此处键入内容一样首先。因此,在收到KeyRelease事件之后,我是否可以将char装入stdin中,以便使用普通的文件读取代码读取?还是我必须在stdin前面建立自己的内部缓冲区,以便可以将新字符破解?或者,这是将键盘事件从应用程序窗口映射到Xterm的一种简单方法吗? 我愿意做这项工作,但我什至不知道我在这里寻找什么。救命?!!     
已邀请:
        我不认为gs会这样做(至少在Linux上如此)。 我尝试将它从SSH会话运行到Linux机器,并将焦点切换到X11窗口,该窗口随渲染的图像(老虎)一起弹出,并且我在那按的键没有转到远程主机上的应用程序。 strace的(结尾)显示GS正在等待stdin-fd = 0的读取 read(3,\“} if \\ n psuserparams readonly p \” ...,4096)= 3258 brk(0x1124000)= 0x1124000 read(3,\“ \”,4096)= 0 关闭(3)= 0 munmap(0x7f8ccaee5000,4096)= 0 poll([{fd = 4,events = POLLIN | POLLOUT}],1,-1)= 1([{fd = 4,revents = POLLOUT}]) writev(4,[{\“ + \\ 2 \\ 1 \\ 0 \”,4},{NULL,0},{\“ \”,0}],3)= 4 poll([{fd = 4,events = POLLIN}],1,-1)= 1([{fd = 4,revents = POLLIN}]) 读取(4,\“ \\ 1 \\ 1 \'\\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 1 \ 0 \\ 200 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 1 \\ 0 \\ 0 \\ 0 \\ 264 \\ 2 \\ 0 \\ 0008 \\ 0A \\ 2 \\ 4 \\ 0 \\ 0 \\ 0 \“,4096) = 32 read(4,0xc9bd54,4096)= -1 EAGAIN(资源暂时不可用) fstat(1,{st_mode = S_IFREG | 0644,st_size = 143204,...})= 0 mmap(NULL,4096,PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS,-1,0)= 0x7f8ccaee5000 write(1,\“ GS> \”,3GS>)= 3 读(0,...未完成... 为了使按键(Ctrl-C)生效,我必须将焦点切换回ssh窗口。当焦点是图像X11窗口时,我尝试过“退出”以及ctrl-C。     
        我不知道答案,但是我知道找到答案的方法。在
strace
下运行ghostscript并观察其作用。与尝试阅读源代码相比,这通常要容易得多且提供更多信息。     
        尤里卡! 在文件gdevxini.c中
435             wm_hints.flags = InputHint;
436             wm_hints.input = False;
437             XSetWMHints(xdev->dpy, xdev->win, &wm_hints);       /* avoid input focus */
编辑:现在,我知道它是什么样子了,我能够找到一些文档:   输入成员用于将应用程序使用的输入焦点模型与窗口管理器进行通信。...从不期望任何键盘输入的应用程序应将此成员设置为
False
。   --X Window系统:C库和协议参考,第282页     

要回复问题请先登录注册