Mac OS X 上的单声道调整终端大小

Posted

技术标签:

【中文标题】Mac OS X 上的单声道调整终端大小【英文标题】:Mono resize terminal on Mac OS X 【发布时间】:2015-07-20 17:18:24 【问题描述】:

在 Windows 中 public static void SetWindowSize(int width, int height) 工作正常。

单声道不支持此方法。

在 Mac OS X 下有没有办法通过一些 DllImport 来做同样的事情?

【问题讨论】:

【参考方案1】:

这是适用于优胜美地的最终解决方案:

感谢 apple.stackexchange 的 RobertN 和 Chris Page: https://apple.stackexchange.com/questions/33736/can-a-terminal-window-be-resized-with-a-terminal-command/47841#47841?newreg=7290606aabbc45468a3f3ee640cd1d09

using System;
using System.Runtime.InteropServices;

namespace Demo.Native.ResizeTerm

    class MainClass
    
        [DllImport ("libc")]
        private static extern int system (string exec);


        public static void Main (string[] args)
        
            system(@"printf '\e[8;50;100t'");
            Console.WriteLine ("We will be 50 lines and 100 columns in Terminal.app now");
            Console.ReadKey ();
        
    

【讨论】:

仅供参考,适用于 Terminal.app,但不适用于 iTerm 等其他 OS-X 应用程序,它不会出错,但也不会调整窗口大小。【参考方案2】:

更新:我忽略了一个事实,即“调整大小”来自 XQuartz 的 (xserver/xterm) 包,Apple 不再直接提供或维护该包;有关信息,请参阅 XQuartz 项目。请参阅 Swell 的答案,因为它使用了术语大小转义序列(所有调整大小都在做)。

您可以使用系统调用来“调整大小”(ma​​n resize 了解详细信息)。这是所有(?)xterm和shell(bash/tsh/csh/...)的标准

假设您没有使用 ncurses,但如果您使用并设置了调整大小处理程序,您将获得调整大小事件,就像用户使用鼠标调整终端大小一样。

using System;
using System.Runtime.InteropServices;

namespace Demo.Native.ResizeTerm

    class MainClass
    
        [DllImport ("libc")]
        private static extern int system (string exec);


        public static void Main (string[] args)
        
            system("resize -s 50 100 > /dev/null");
            Console.WriteLine ("We will be 50 lines and 100 columns in Terminal.app now");
            Console.ReadKey ();
        
    

我将此示例添加到 CursesSharp 存储库,github 源链接:https://github.com/sushihangover/CursesSharp/blob/368906549512446dc5e97f8c9214c482d6847aac/CursesSharp.Demo/Demo.Native.ResizeTerm/Program.cs

【讨论】:

Apple 没有“开源”调整大小。它已经获得 MIT 许可(并且在没有 Apple 帮助的情况下进行维护)比 OSX 存在的时间要长得多。控制序列中使用的调整大小的特定功能(-s option)最初记录为 dtterm 的特定于 Sun 的功能。 顺便说一句,OP 的问题是关于单声道,而不是 ncurses。 我并不是说 Apple 编写了 xserver,但他们的 XQuartz 版本已移交/返回给 XQuartz。更新了我的答案。单核细胞增多症?是的,我用在 OS-X/Mono 上运行的 C# 写了我的答案,只是说明了一个事实,因为很多人使用在 Mono 下运行的 C# 包装的 ncurses(就像我自己一样),并且术语调整大小会导致回调到多个cnurses DotNet 库。 @RobertN 我有一个 Yosemite 的香草安装。

以上是关于Mac OS X 上的单声道调整终端大小的主要内容,如果未能解决你的问题,请参考以下文章

VMware虚拟机Mac OS X无法调整扩展硬盘大小的解决方案

VMware虚拟机Mac OS X无法调整扩展硬盘大小的解决方案(转)

VMware虚拟机Mac OS X无法调整扩展硬盘大小,更新xcode时出现磁盘空间不足

VMware 11安装Mac OS X 10.10 及安装Mac Vmware Tools(超详细),以及动态调整虚拟机硬盘大小

mac磁盘工具无法调整分区大小也不能增加新分区,该怎么办?

调整 Mac book Launchpad(启动台)图标大小调整