如何使用perl在屏幕中间打印或对齐菜单

How to print or align menu at the middle of screen using perl

我想使用 perl 将此菜单对齐到屏幕中间,并且还想在屏幕中间输入。 菜单代码如下

while(1){ // 
        printf "Please select from one of expense catagories";
        printf "1 - House \n";
        printf "2 - Grocery \n";
        printf "3 - Car \n";
        printf "4 - Hospital \n";
        printf "5 - Others \n";
        printf "q - quit \n";
        my $input = <STDIN>;
        if ($input =~ /q/) {
        exit;
        }// 

我尝试使用制表符,但是当我调整屏幕大小时它没有正确对齐。所以想知道如何在屏幕上的特定位置打印。

目前输出如下:

Please select from one of expense catagories
1 - House
2 - Grocery
3 - Car
4 - Hospital

您可以使用 Curses::UI 包执行此操作,并且(如果您在下面使用 ncurses),处理生成的 KEY_RESIZE 输入。

How to get with Curses the window-size from a resized window? 中提出了类似的问题,其中接受的答案似乎与此一致。

尝试使用 stty -a 命令获取当前终端中的列数,并使用该值确定菜单的位置。 (我们可以使用 printf 来做 left/right 填充)。

打印菜单之前,每次使用stty -a命令确定屏幕宽度,以便菜单可以相应对齐。