Shell 在Emacs中调整终端的大小

Shell 在Emacs中调整终端的大小,shell,emacs,ansi-term,Shell,Emacs,Ansi Term,假设我有一个Emacs窗口(即Emacs称为帧的细分),运行一个M-x ansi术语缓冲区(例如运行zsh),其宽度为~500像素。然后我运行几个shell命令,并将输出包装为适合这些500像素 假设我现在将此窗口或缓冲区变宽(例如,1000像素),可能是因为我杀死了帧中的其他窗口,为我的ansi术语窗口提供了更多空间 在我的ansi term窗口中,是否有任何方法可以让旧的输出重新调整大小以利用新的窗口大小?(即,使行变宽并根据新窗口大小重新包装)?不,通常不是,因为生成输出的程序(可能已)将

假设我有一个Emacs窗口(即Emacs称为帧的细分),运行一个
M-x ansi术语
缓冲区(例如运行
zsh
),其宽度为
~500
像素。然后我运行几个shell命令,并将输出包装为适合这些
500
像素

假设我现在将此窗口或缓冲区变宽(例如,
1000
像素),可能是因为我杀死了帧中的其他窗口,为我的
ansi术语
窗口提供了更多空间


在我的
ansi term
窗口中,是否有任何方法可以让旧的输出重新调整大小以利用新的窗口大小?(即,使行变宽并根据新窗口大小重新包装)?

不,通常不是,因为生成输出的程序(可能已)将自身格式化以适应打印时有效的显示器宽度,并且在调整大小时不再运行

但是,如果它仍在运行,它将获得调整自身大小的选项(a
SIGWINCH
)。您可以使用
链接
/
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)会在调整大小时重新写入当前输入行,但这就是它负责打印的全部内容。