외부 명령으로 종결자를 분할합니까?

외부 명령으로 종결자를 분할합니까?

gnome-pie 또는 이와 유사한 것에서 터미네이터에 프레임(탭 대신)을 추가할 수 있기를 원합니다. "--help"는 별 의미가 없는 것 같지만, 혹시 알고 계시나요?

답변1

어떤 키 조합이든 시뮬레이션하기 위해 제가 생각한 것은 xdotool도구를 사용하는 것이었습니다.

설치하다$ sudo apt-get install xdotool

용법:

$ xdotool key [key]+[key]

예를 들어

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

이를 통해 일부 별칭을 더 쉽게 만들 수 있습니다.

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

여기에 이미지 설명을 입력하세요.

시도 해봐.

고쳐 쓰다

좋아, 해결책을 찾아보자.

다른 터미널에서 명령을 실행하는 유틸리티를 찾았습니다.여기.

파일을 만들고 $ vim ttyecho.c이 코드를 복사하세요.

#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);
}

make그런 다음 + 파일을 실행하십시오.

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

지금 사용해 보세요, 터미네이터 터미널을 확인해보세요tty

$ tty
/dev/pts/0

다른 터미널에서 다음 명령을 실행하십시오.

$ ttyecho -n /dev/pts/0 splith

답변2

이것은 타코미의 훌륭한 부록입니다답변;좋아요 부탁드립니다.

AFAIK 외부 DBUS 명령을 사용하여 터미네이터를 분할할 수 없으므로 다른 답변에서 제안된 키 입력 트릭을 사용해야 합니다. 터미네이터에 키 입력을 보내려면 먼저 터미네이터가 활성화되어 있는지 확인해야 합니다. 이를 수행하는 한 가지 방법은 다음과 같습니다. 내 경우에는 Ctrl+ 로 활성화되는 항상 열려 있는 "팝업" 터미널로 터미네이터를 사용합니다 Space. 내 스크립트는 숨겨져 있는지 확인한 다음 Ctrlsimulate+를 통해 표시합니다 Space. 그렇지 않으면 표시되지만 앞에 있지 않은 경우 창을 활성화합니다.

팝업 터미널로 사용하지 않는 경우에는 어쨌든 작동하며 해당 조건을 실행하지 마십시오.

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

이 스크립트를 실행하여 창을 활성화한 후 xdotool아래의 다른 답변과 같이 명령을 실행하면 됩니다. 또한 사용을 권장합니다 --clearmodifiers( man xdotool자세한 내용은 참고자료 참조).

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

답변3

요즘에는 다음을 사용할 수 있습니다 remotinator hsplit.https://terminator-gtk3.readthedocs.io/en/latest/advancedusage.html#remotinator

오늘 이 글을 찾고 있었는데 다른 사람(또는 미래의 나)도 이 글을 발견할 경우를 대비해 여기에 게시했습니다.

관련 정보