如何在iTerm中获取当前窗口尺寸并实现粘贴当前窗口宽度到会话的动作?
如何在iTerm中获取当前窗口尺寸并实现粘贴当前窗口宽度到会话的动作?
嘿,我刚好碰到过一模一样的问题!你猜得没错,用普通shell命令确实行不通——因为它会新开一个子会话,拿到的只是iTerm默认的80列宽度,根本不是当前活跃窗口的真实尺寸。要搞定这个,必须用iTerm的原生API才行,下面给你两种简单好用的方法:
方法一:用AppleScript快速实现
这是最直接的方式,不用额外装依赖:
- 打开iTerm,点击顶部菜单栏的
iTerm2→偏好设置(或者直接按Cmd+,快捷键) - 切换到
按键标签页,点击右下角的添加动作 - 在弹出的配置窗口里,
动作选择运行AppleScript,然后把下面的代码粘贴进去:
tell application "iTerm2" tell current window set windowWidth to columns of current session tell current session write text windowWidth as string end tell end tell end tell
- 最后给这个动作绑定一个顺手的快捷键(比如
Cmd+Shift+W),点击保存就大功告成了!以后按下快捷键,当前窗口的宽度(按字符数计算)就会直接输入到当前会话里。
方法二:用iTerm2 Python API(适合复杂扩展)
如果之后你想加更多逻辑,用Python会更灵活。首先得先装iTerm2的Python库:
打开终端运行:
pip3 install iterm2
然后同样去配置动作:
- 还是在偏好设置的
按键标签页添加动作,动作选择运行Python脚本 - 粘贴下面的代码:
import iterm2 async def main(connection): app = await iterm2.async_get_app(connection) current_window = app.current_window if not current_window: return current_session = current_window.current_tab.current_session if current_session: # 获取当前会话的列数,也就是窗口的字符宽度 width = current_session.screen.columns # 将宽度写入会话,等同于粘贴效果 await current_session.async_send_text(str(width)) iterm2.run_until_complete(main)
- 绑定好快捷键后就能用啦。这里用异步API是因为iTerm的Python接口是基于异步设计的,这样能确保准确拿到当前活跃的窗口和会话。
简单说下原理:之前你用coprocess调用shell命令时,其实是启动了一个独立的子shell环境,它的尺寸是iTerm默认的配置值;而用iTerm的原生API,能直接访问当前正在使用的窗口和会话的实时属性,自然就能拿到真实的窗口宽度了。
备注:内容来源于stack exchange,提问作者GeneC
相关产品推荐
相关产品推荐

