Dividir Terminator com comando externo?

Dividir Terminator com comando externo?

Eu gostaria de poder adicionar quadros (não guias) ao terminador do gnome-pie ou algo semelhante. "--help" não parecia ter nada, mas vocês têm?

Responder1

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

Instalar$ 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

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

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

insira a descrição da imagem aqui

Experimente.

ATUALIZAR

Ok, vamos encontrar uma solução.

Encontrei um utilitário para executar comandos de outros terminais emaqui.

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+ arquivo

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

Agora experimente, verifique no terminal terminadortty

$ tty
/dev/pts/0

Em outro terminal execute o seguinte

$ ttyecho -n /dev/pts/0 splith

Responder2

Este é um adendo ao excelente do tachomiresponder; por favor vote positivamente.

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

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

windowlist=$(xprop -root | sed -rn 's/_NET_CLIENT_LIST_STACKING\(WINDOW\): window id # (.*)/\1/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

Após executar este script para ativar a janela, basta executar os xdotoolcomandos conforme a outra resposta, ou seja, uma das seguintes. Eu também sugiro usar --clearmodifiers(veja man xdotoolpara mais informações).

xdotool key --clearmodifiers ctrl+shift+o
xdotool key --clearmodifiers ctrl+shift+e

Responder3

Hoje em dia você pode usar remotinator hsplit:https://terminator-gtk3.readthedocs.io/en/latest/advancedusage.html#remotiator

Eu estava procurando por isso hoje, e apenas postei aqui caso alguém (ou eu no futuro) encontre esse post também.

informação relacionada