tamanho máximo de rolagem do gerenciador de janelas “screen”

3

O gerenciador de janelas "screen" permite especificar o tamanho desejado do buffer de rolagem .

Por exemplo ao iniciar uma nova sessão: ( source )

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

Ou quando já estiver dentro de uma sessão de tela com estes comandos: ( 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 C-a i to view the current setting.

Mas parece que não consigo encontrar documentação indicando o valor máximo para num para qualquer uma das abordagens acima.

Então a questão é: como determinar o comprimento máximo de rolagem para o utilitário de tela?

    
por Paul van Leeuwen 24.06.2017 / 12:12

2 respostas

3

Eu não tenho certeza de onde encontrá-lo documentado, mas cavar a fonte um pouco dá algumas pistas. Quando você passa em -h , define o histheight (veja screen.c ). Em main , analisa -h da seguinte forma:

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;

A nwin_options struct é uma instância de NewWindow , que é definida em window.h :

struct NewWindow {
    int StartAt;    /* where to start the search for the slot */
    char    *aka;       /* aka string */
    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;
};

onde podemos ver que histheight é um int, então presumivelmente o valor máximo que você pode definir é maxint para um int assinado.

    
por 24.06.2017 / 13:13
1

Enquanto tentava responder à minha própria pergunta, foi isso que encontrei no meu próprio sistema por meio de tentativa e erro:

resposta: há um limite rígido (algo entre 50.000.000 e 1.000.000.000), mas o desempenho provavelmente será o seu gargalo (como tal, não consegui determinar o limite rígido exato)

Minhas experiências incluíram:

Inicie uma nova sessão de tela sem ter nenhum arquivo de configuração ~/.screenrc :

screen -a

Dentro da tela, abra o prompt de comando da tela pressionando ctrl + a , : e digite o comando:

scrollback 1000000

que resultou na mensagem: scrollback set to 1000000 (1.000.000).

Experimentar scrollback 1000000000 (1.000.000.000) rapidamente resultou na mensagem scrollback set to 0 . Presumo que isso significa que 1.000.000 são aceitos e 1.000.000.000 é demais.

Tentando scrollback 100000000 '(100.000.000) fez a tela parar. Uma segunda sessão de terminal e um pouco de paciência depois consegui matar a tela. Esse comportamento acabou sendo consistente ao tentar a mesma coisa novamente.

A tentativa de scrollback 10000000 (10.000.000) com atraso de 2 segundos resultou na mensagem scrollback set to 10000000 .

A tentativa de scrollback 50000000 (50.000.000) com 60 segundos de atraso resultou na mensagem scrollback set to 50000000 .

    
por 24.06.2017 / 13:10