xterm을 열거나 기존 xterm으로 전환하기 위한 Fluxbox 단축키

xterm을 열거나 기존 xterm으로 전환하기 위한 Fluxbox 단축키

Fluxbox를 사용하여 다음 속성을 사용하여 터미널(말하자면 무엇이든)을 열 수 있는 winkey+ 라는 단축키를 설정할 수 있습니까 ?rxterm

  1. 작업 디렉터리 = ~인 터미널이 이미 존재하고 현재 실행 중인 명령이 없는 경우(예: 프롬프트에서) 이 터미널이 표시됩니다.
  2. 또는 새 터미널을 만들지 않는 경우

답변1

이것이 내가 하는 방법이다:

  1. 프롬프트가 표시되면 쉘 제목을 "bash"로 설정하고, 명령을 실행할 때 명령 이름은 "bash"로 설정하거나 구별되는 항목을 설정하십시오.
  2. 열려 있는 창 목록을 호출하는 스크립트를 만든 wmctrl후 다음을 수행합니다.
    • wmctrl"bash"라는 제목의 창이 발견되면 이를 상승시킵니다 .
    • 그렇지 않으면 시작xterm
  3. xbindkeys단축키를 눌렀을 때 스크립트를 호출하는데 사용됩니다 .

명령을 실행할 때 쉘에서 창 제목을 설정하도록 하세요.

bash에서 이 작업을 수행하는 방법의 단순화된 버전은 다음과 같습니다. 코드를 주의 깊게 확인하지는 않았지만 내 컴퓨터에서는 작동합니다.

# set the title when we run a command
setcommandhook()
{
    if $has_debug_trap
    then
        trap 'command=$BASH_COMMAND; eval settitle "\"${title}\""; trap - DEBUG' DEBUG
    fi
}

# set the xterm title
settitle()
{
    printf "\033]0;$*\007"
}

promptstring='$(hostname):$(pwd)$ '
title='$(hostname) "${command:-$0}"'

# prompt and window title
if test -n "${title}"
then
    PROMPT_COMMAND='command=; eval settitle "\"${title}\""'
    if $has_debug_trap
    then
        PROMPT_COMMAND="$PROMPT_COMMAND; setcommandhook"
    fi
fi
if test -n "${promptstring}"
then
    PS1='$(eval echo -n "\"${promptstring}\"")'
fi

후크가 있어서 작업하기가 zsh더 쉽습니다 .preexec

너는 볼 수있어내 쉘 구성getcommand더 나은 방법으로 명령을 처리하는 기능 과 같은 자세한 내용을 확인하세요 .fg


bash 프롬프트로 xterm을 시작하고, 그렇지 않으면 새 프롬프트를 시작하십시오.

제목이 있는 창을 wmctrl -l찾아 windows 를 나열하는 스크립트를 작성하세요 . bash발견되면 실행 wmctrl -i -a <id returned by wmctrl -l>하여 발생시키고, 그렇지 않으면 을 호출하세요 xterm.

이 작업을 수행하는 스크립트는 다음과 같습니다.

#!/bin/bash
#
# bashprompt
#
# if there is an xterm open at a bash prompt, raise/focus that window
# if there isn't start a new xterm
#
# requires that your xterm window title has "bash" at the end
# when there is no command running and doesn't have "bash" at the end
# when a command is running
#
# see <http://unix.stackexchange.com/questions/6842> for more details
#
# Mikel Ward <[email protected]>

# change this to whatever is unique about your window title
# (i.e. a string that appears in the title when the shell is at a prompt
#  but does not appear when running a command)
prompttitle="bash$"
terminalprog="xterm"

if ! type wmctrl >/dev/null 2>&1; then
    echo "wmctrl can't be found, please install it" 1>&2
    exit 1
fi

if ! output="$(wmctrl -l)"; then
    echo "Error running wmctrl -l" 1>&2
    exit 1
fi
while IFS=$'\n' read -r line; do
    if [[ $line =~ $prompttitle ]]; then
        id=${line%% *}
        break
    fi
done <<EOF
$output
EOF

if test -n "$id"; then
    wmctrl -i -a "$id"
else
    "$terminalprog"&
fi

또는내 스크립트 저장소에서 다운로드하세요..


Win+R을 누르면 스크립트 실행

스크립트가 호출된다고 가정하고 다음 내용으로 파일을 /usr/local/bin/bashprompt만듭니다 .~/.xbindkeysrc

"/usr/local/bin/bashprompt"
    Mod4 + r

그런 다음 xbindkeys. 이것을 .Xclients파일이나 유사한 항목에 추가하면 자동으로 시작됩니다.

답변2

fluxboxWindows는 특정 패턴에 따라 자체적으로 일치될 수 있습니다. 적어도 fluxbox-1.1.1이것은 가능합니다:

  Mod4 r :If {Some Matches (title=.*bash) (class=XTerm)} {NextWindow (xterm)} {Exec xterm}

(번역: on press windows-key + r: check, if there is a xterm with its title ending in 'bash'. if there is, go to that window; if not, open a new one. 최첨단 버전(git)을 사용하면 다른 작업 공간의 창으로 이동할 수도 있습니다.

당신이 해야 할 유일한 일은 작업에 따라 제목(또는 bash가 있는 창의 다른 속성)을 수정하는 것입니다. 프롬프트를 보면 반드시 설정해야 할 속성이 있는데, 명령이 실행되면 해당 속성을 제거해야 합니다. fluxbox애플리케이션 내부를 볼 수 있는 방법은 없으며 Windows에 대해서만 알고 있습니다.

관련 정보