taille de défilement maximale du gestionnaire de windows "écran"

Le gestionnaire de windows "écran" permet de spécifier la taille désirée du tampon de défilement.

Par exemple lors du démarrage d'une nouvelle session: ( source )

'-h num' Set the history scrollback buffer to be num lines high. Equivalent to the defscrollback command (see Copy). 

Ou quand déjà à l'intérieur d'une session d'écran avec ces commands: ( source )

 12.1.2 Scrollback — Command: defscrollback num Same as the scrollback command except that the default setting for new windows is changed. Defaults to 100. — Command: scrollback num Set the size of the scrollback buffer for the current window to num lines. The default scrollback is 100 lines. Use Ca i to view the current setting. 

Mais je ne peux pas sembler find la documentation indiquant la valeur maximum pour num pour l'une des approches ci-dessus.

La question est donc la suivante: comment déterminer la longueur de défilement maximale pour l'utilitaire d'écran?

Je ne sais pas où find cela documenté, mais creuser dans la source un peu donne des indices. Lorsque vous passez en -h il définit l' histheight (voir screen.c ). En principe, il parsing -h comme suit:

 case 'h': if (--argc == 0) exit_with_usage(myname, NULL, NULL); nwin_options.histheight = atoi(*++argv); if (nwin_options.histheight < 0) exit_with_usage(myname, "-h: %s: negative scrollback size?", *argv); break; 

La structure nwin_options est une instance de NewWindow qui est définie dans window.h :

 struct NewWindow { int StartAt; /* where to start the search for the slot */ char *aka; /* aka ssortingng */ char **args; /* argv vector */ char *dir; /* directory for chdir */ char *term; /* TERM to be set instead of "screen" */ bool aflag; bool dynamicaka; int flowflag; int lflag; int histheight; int monitor; int wlock; /* default writelock setting */ int silence; bool wrap; bool Lflag; /* logging */ int slow; /* inter character milliseconds */ int gr; bool c1; int bce; int encoding; char *hstatus; char *charset; int poll_zombie_timeout; }; 

où nous pouvons voir que histheight est un int, la valeur maximale que vous pouvez définir est maxint pour un maxint signé.

En essayant de répondre à ma propre question, c'est ce que j'ai trouvé sur mon propre système par essais et erreurs:

réponse: il y a une limite ssortingcte (quelque part entre 50.000.000 et 1.000.000.000), mais la performance sera probablement votre goulot d'étranglement (en tant que tel, je n'étais pas capable de déterminer la limite ssortingcte exacte)

Mes expériences comprenaient:

Démarrez une nouvelle session d'écran sans avoir de file de configuration ~/.screenrc :

 screen -a 

Dans l'écran interne, ouvrez l'invite de command en appuyant sur ctrl + a , et entrez la command:

 scrollback 1000000 

qui a abouti au message: scrollback set to 1000000 (1 000 000).

En essayant rapidement le scrollback 1000000000 (1 000 000 000), le scrollback set to 0 du message a été scrollback set to 0 . Je suppose que cela signifie que 1 000 000 sont acceptés et 1 000 000 000 c'est trop.

Tentative de scrollback 100000000` (100 000 000) rendu écran bloqué. Une deuxième session de terminal et de la patience plus tard, j'ai pu tuer l'écran. Ce comportement s'est avéré cohérent en essayant la même chose à nouveau.

En essayant le scrollback 10000000 (10 000 000) avec un timeout de 2 secondes, le scrollback set to 10000000 du message a été scrollback set to 10000000 .

En essayant le scrollback 50000000 (50 000 000) avec un timeout de 60 secondes, le scrollback set to 50000000 du message a été scrollback set to 50000000 .