Como alguns aplicativos aceitam cliques do mouse em bash sobre ssh?
772
Aplicativos como lynxnavegador, htopetc e muitos outros aceitam cliques do mouse dependentes da posição no bashshell ssh. Eu sei que sshé uma interface de linha de comando. Então, como ele aceita cliques do mouse?
IMHO, a maneira mais simples de escrever um aplicativo TUI é usar ncurses .
"New Curses" é uma biblioteca que abstrai o design da TUI dos detalhes do dispositivo subjacente. Todos os softwares que você citou usam ncurses para renderizar sua interface.
Quando você clica em um emulador de terminal (por exemplo, xterm, gnome-term, etc.), o emulador de terminal traduz o clique em uma sequência de códigos ANSI Escape . Essas sequências são lidas e traduzidas em eventos pela biblioteca ncurses.
É bem simples, em uma sessão de terminal serial da velha escola, o mouse não era realmente uma opção para enviar entrada para a sessão de shell interativa. (Tenho certeza de que houve algumas exceções iniciais.)
No entanto, quando você está executando um emulador de terminal dentro de uma sessão de área de trabalho gráfica , o emulador de terminal pode reconhecer o mouse.
O que acontece em alto nível é que os eventos do mouse são traduzidos pelo emulador de terminal ( xtermpor exemplo) em sequências de terminal e essas são enviadas para a sessão de shell interativa do aplicativo que você está executando htop, vimseja qual for. Nesse caso, vimapenas vê a sequência do terminal (como uma simples série de eventos de teclado produziria), não o evento do mouse.
IMHO, a maneira mais simples de escrever um aplicativo TUI é usar ncurses .
"New Curses" é uma biblioteca que abstrai o design da TUI dos detalhes do dispositivo subjacente. Todos os softwares que você citou usam ncurses para renderizar sua interface.
Quando você clica em um emulador de terminal (por exemplo, xterm, gnome-term, etc.), o emulador de terminal traduz o clique em uma sequência de códigos ANSI Escape . Essas sequências são lidas e traduzidas em eventos pela biblioteca ncurses.
Você pode encontrar um exemplo em Stack Overflow: Eventos de movimento do mouse em NCurses
É bem simples, em uma sessão de terminal serial da velha escola, o mouse não era realmente uma opção para enviar entrada para a sessão de shell interativa. (Tenho certeza de que houve algumas exceções iniciais.)
No entanto, quando você está executando um emulador de terminal dentro de uma sessão de área de trabalho gráfica , o emulador de terminal pode reconhecer o mouse.
O que acontece em alto nível é que os eventos do mouse são traduzidos pelo emulador de terminal (
xterm
por exemplo) em sequências de terminal e essas são enviadas para a sessão de shell interativa do aplicativo que você está executandohtop
,vim
seja qual for. Nesse caso,vim
apenas vê a sequência do terminal (como uma simples série de eventos de teclado produziria), não o evento do mouse.