Split Terminator com comando externo?

0

Eu gostaria de poder adicionar frames (não tabs) ao terminator do gnome-pie ou algo similar. "--help" não parece ter nada, mas vocês?

    
por Aidan Edwards 11.02.2016 / 22:29

2 respostas

2

Para simular qualquer combinação de teclas, o que me vem à cabeça é usar a ferramenta xdotool .

Instale $ sudo apt-get install xdotool

Uso:

$ xdotool key [key]+[key]

por exemplo,

$ xdotool key ctrl+shift+o # To split horizontal
$ xdotool key ctrl+shift+e # To split vertical

Tendo isso, você pode facilitar a criação de alguns aliases.

$ alias splith='xdotool key ctrl+shift+o'
$ alias splitv='xdotool key ctrl+shift+e'

Dêumachance.

UPDATE

Ok,vamosencontrarumasolução.

Euencontreiumutilitárioparaexecutarcomandosdeoutrosterminaisem aqui.

Crie um arquivo $ vim ttyecho.c , copie este código

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <string.h>
#include <unistd.h>

void print_help(char *prog_name) {
        printf("Usage: %s [-n] DEVNAME COMMAND\n", prog_name);
        printf("Usage: '-n' is an optional argument if you want to push a new line at the end of the text\n");
        printf("Usage: Will require 'sudo' to run if the executable is not setuid root\n");
        exit(1);
    }

int main (int argc, char *argv[]) {
    char *cmd, *nl = "\n";
    int i, fd;
    int devno, commandno, newline;
    int mem_len;
    devno = 1; commandno = 2; newline = 0;
    if (argc < 3) {
        print_help(argv[0]);
    }
    if (argc > 3 && argv[1][0] == '-' && argv[1][1] == 'n') {
        devno = 2; commandno = 3; newline=1;
    } else if (argc > 3 && argv[1][0] == '-' && argv[1][1] != 'n') {
        printf("Invalid Option\n");
        print_help(argv[0]);
    }
    fd = open(argv[devno],O_RDWR);
    if(fd == -1) {
        perror("open DEVICE");
        exit(1);
    }
    mem_len = 0;
    for ( i = commandno; i < argc; i++ ) {
        mem_len += strlen(argv[i]) + 2;
        if ( i > commandno ) {
            cmd = (char *)realloc((void *)cmd, mem_len);
        } else { //i == commandno
            cmd = (char *)malloc(mem_len);
        }

        strcat(cmd, argv[i]);
        strcat(cmd, " ");
    }
    if (newline == 0)
        usleep(225000);
      for (i = 0; cmd[i]; i++)
        ioctl (fd, TIOCSTI, cmd+i);
      if (newline == 1)
        ioctl (fd, TIOCSTI, nl);
    close(fd);
    free((void *)cmd);
    exit (0);
}

Em seguida, execute make + file

$ make ttyecho
$ sudo chown root:root ttyecho
$ sudo cp ttyecho /usr/bin

Agora tente, verifique no terminal do terminador tty

$ tty
/dev/pts/0

Em outro terminal, execute o seguinte

$ ttyecho -n /dev/pts/0 splith
    
por 11.02.2016 / 22:47
1

Este é um adendo à excelente resposta do tachomi; por favor, faça um upvote.

AFAIK não há como dividir o terminador com (por exemplo) um comando DBUS externo, portanto, é necessário usar um hack de pressionamento de tecla conforme proposto na outra resposta. Para enviar as teclas ao terminador, você precisa ter certeza de que está ativo primeiro. Uma maneira de fazer isso é a seguinte. No meu caso, eu uso o terminador como um terminal "pop-up" sempre ativo, ativado com Ctrl + Espaço . Meu script verifica se está oculto, então faz parecer que está emulando Ctrl + Espaço , caso contrário, se estiver visível, mas não na frente, ele ativa a janela. / p>

Se você não usá-lo como um terminal pop-up, isso provavelmente funcionará de qualquer maneira e nunca passará por essa condição.

windowlist=$(xprop -root | sed -rn 's/_NET_CLIENT_LIST_STACKING\(WINDOW\): window id # (.*)//p' | tr -d ',')
terminator_visible=false
for i in $windowlist; do
  [[ $(xprop -id $i | grep WM_CLASS\(STRING\)) == 'WM_CLASS(STRING) = "terminator", "Terminator"' ]] && terminator_visible=true && term_id=$i
done

if [[ $terminator_visible == false ]]; then # it's hidden
  xdotool key --clearmodifiers ctrl+space
elif [[ $(xprop -id $(xdotool getactivewindow) | grep WM_CLASS\(STRING\)) != 'WM_CLASS(STRING) = "terminator", "Terminator"' ]]; then # it's visible, but not active
  xdotool windowactivate $term_id 2> /dev/null
fi

Depois de executar este script para ativar a janela, basta executar os comandos xdotool de acordo com a outra resposta, ou seja, um dos seguintes. Também sugiro usar --clearmodifiers (consulte man xdotool para obter mais informações).

xdotool key --clearmodifiers ctrl+shift+o
xdotool key --clearmodifiers ctrl+shift+e
    
por 11.02.2016 / 23:43