¿Dividir Terminator con comando externo?

¿Dividir Terminator con comando externo?

Me gustaría poder agregar marcos (no pestañas) al terminador desde gnome-pie o algo similar. "--help" no parecía tener nada, pero ¿ustedes sí?

Respuesta1

Para simular cualquier combinación de teclas lo que me viene a la cabeza es utilizar xdotoolherramienta.

Instalar$ sudo apt-get install xdotool

Uso:

$ xdotool key [key]+[key]

p.ej

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

Teniendo esto, puedes facilitar la creación de algunos alias.

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

ingrese la descripción de la imagen aquí

Intentalo.

ACTUALIZAR

Ok, encontremos una solución.

Encontré una utilidad para ejecutar comandos desde otras terminales enaquí.

Crea un archivo $ vim ttyecho.c, copia 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);
}

Luego ejecuta make+ archivo

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

Ahora pruébalo, comprueba el terminal terminador.tty

$ tty
/dev/pts/0

En otra terminal ejecute lo siguiente

$ ttyecho -n /dev/pts/0 splith

Respuesta2

Esta es una adición al excelente trabajo de tachomi.respuesta; por favor votalo.

AFAIK, no hay forma de dividir el terminador con (por ejemplo) un comando DBUS externo, por lo que debe usar un truco de pulsación de tecla como se propone en la otra respuesta. Para enviar a Terminator las pulsaciones de teclas, primero debe asegurarse de que esté activo. Una forma de hacer esto es la siguiente. En mi caso, uso terminator como terminal "emergente" siempre activo, activado con Ctrl+ Space. Mi script verifica si está oculto y luego lo hace aparecer emulando Ctrl+ Space; de lo contrario, si está visible, pero no al frente, activa la ventana.

Si no lo usa como terminal emergente, entonces probablemente debería funcionar de todos modos, y nunca pasar por ese 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

Después de ejecutar este script para activar la ventana, simplemente ejecute los xdotoolcomandos según la otra respuesta, es decir, uno de los siguientes. También sugeriría usar --clearmodifiers(consulte man xdotoolpara obtener más información).

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

Respuesta3

Estos días puedes utilizar remotinator hsplit:https://terminator-gtk3.readthedocs.io/en/latest/advancedusage.html#remotinator

Estaba buscando esto hoy y lo publiqué aquí en caso de que alguien más (o yo en el futuro) también encuentre esta publicación.

información relacionada