Mono在Mac OS X上调整终端大小

时间:2015-07-20 17:18:25

标签: c# macos terminal mono

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

使用mono时,不支持此方法。

在Mac OS X下是否有办法使用一些DllImport来做同样的事情?

2 个答案:

答案 0 :(得分:2)

以下是适用于Yosemite的最终解决方案:

感谢RobertN&来自apple.stackexchange的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 ();
        }
    }
}

答案 1 :(得分:1)

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

您可以使用系统调用来调整大小' ( man resize 了解详情)。这是所有(?)xterm和shell(bash / tsh / csh /...)

的标准

假设您没有使用ncurses,但如果您正在使用调整大小处理程序集,则会获得resize事件,就像用户使用鼠标调整终端大小一样。

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 repo,github链接到源:https://github.com/sushihangover/CursesSharp/blob/368906549512446dc5e97f8c9214c482d6847aac/CursesSharp.Demo/Demo.Native.ResizeTerm/Program.cs