Shell 在Emacs中调整终端的大小
假设我有一个Emacs窗口(即Emacs称为帧的细分),运行一个Shell 在Emacs中调整终端的大小,shell,emacs,ansi-term,Shell,Emacs,Ansi Term,假设我有一个Emacs窗口(即Emacs称为帧的细分),运行一个M-x ansi术语缓冲区(例如运行zsh),其宽度为~500像素。然后我运行几个shell命令,并将输出包装为适合这些500像素 假设我现在将此窗口或缓冲区变宽(例如,1000像素),可能是因为我杀死了帧中的其他窗口,为我的ansi术语窗口提供了更多空间 在我的ansi term窗口中,是否有任何方法可以让旧的输出重新调整大小以利用新的窗口大小?(即,使行变宽并根据新窗口大小重新包装)?不,通常不是,因为生成输出的程序(可能已)将
M-x ansi术语
缓冲区(例如运行zsh
),其宽度为~500
像素。然后我运行几个shell命令,并将输出包装为适合这些500
像素
假设我现在将此窗口或缓冲区变宽(例如,1000
像素),可能是因为我杀死了帧中的其他窗口,为我的ansi术语
窗口提供了更多空间
在我的
ansi term
窗口中,是否有任何方法可以让旧的输出重新调整大小以利用新的窗口大小?(即,使行变宽并根据新窗口大小重新包装)?不,通常不是,因为生成输出的程序(可能已)将自身格式化以适应打印时有效的显示器宽度,并且在调整大小时不再运行
但是,如果它仍在运行,它将获得调整自身大小的选项(aSIGWINCH
)。您可以使用链接
/elinks
浏览器等来测试这一点。这是ANSI终端模式的真正“用例”:使用“curses”或类似系统移动光标的程序
正如@user2491所指出的,
shell模式
确实使用文字包装处理基于文本(基于流)的输出,代价是无法运行“curses”类型的程序。它的设计目的是让您的会话更像一个文本文件,而不是一个“真正的终端”。Mm。。我会说不。试试M-x外壳,它的性能和你描述的一样,我刚试过。谢谢!您是否介意进一步说明如何使用SIGWINCH
调整在Emacs中运行ansi术语的窗口大小?(我总是让终端仍在运行)。这是正在运行的程序的责任。终端程序本身(例如bash)通常不会担心这些事情,但例如mplayer
,alpine
,链接
都有相应的处理程序。如果你的字面意思是,如何在你自己的程序中处理SIGWINCH,我建议使用更高级别的库,如ncurses
,但你也可以看看这个答案:我不确定我是否遵循。我在我的一个窗口中运行了M-x ansi术语(例如zsh
)。您说过,如果终端仍在运行,我仍然希望它能使用SIGWINCH
自动重写文本。确切地说,SIGWINCH
是什么?我可以从Emacs向缓冲区运行终端发送一个信号,让它重新编写文本吗?SIGWINCH是一个Unix信号,表示“您的窗口大小已更改”。而且,是的,zsh/Can/redraw本身,但我想您可能误解了:如果在窗口狭窄时运行,比如说“ls”,那么,它将结果打印在一列中,然后将窗口调整得更宽,“ls”不再运行,因此无法重新格式化其输出。如果您运行“alpine”或“links”之类的程序,它将在调整大小时刷新自身。“zsh”可能只是打印一个提示;“bash”,至少(我手头没有zsh)会在调整大小时重新写入当前输入行,但这就是它负责打印的全部内容。