특정 응용 프로그램의 창을 높이는 바로가기 바인딩

특정 응용 프로그램의 창을 높이는 바로가기 바인딩

나는 일반적으로 내 워크스테이션에서 여러 응용 프로그램을 실행하고 있습니다. 보통 나는필요 VIM, 메일 클라이언트, IM, VLC 등과 같이 항상 필요하지는 않은 기타 응용 프로그램도 있습니다 Google Chrome.Terminal

VIM단 하나의 단축키(예: Ctrl++ ) Shift를 사용하여 항상 필요한 애플리케이션으로 전환할 수 있다면 매우 편리할 것입니다 .V

어떻게 달성할 수 있나요?

답변1

이것은 tmux 세션 내에서 사용하기 때문에 추가 논리를 사용하여 irssi로 이 작업을 수행하는 데 사용하는 스크립트이지만 일부 부분은 적용 가능합니다. 실제로 SSH를 통해 원격으로 작동하고 새로운 irssi 메시지의 GUI 알림을 제어하는 ​​코드도 포함되어 있지만 명확성을 위해 해당 코드를 제거하려고 했습니다(사용 지침 및 인수 처리 포함). 몇 가지 디버깅 설명을 남깁니다 printf.

#!/bin/sh
# Locally raise/attach/start irssi session.
#
# Designed for use with tmux and irssi.

TMUX="/usr/bin/tmux"
TERMINAL="/usr/bin/urxvtc"
IRSSI="/usr/bin/irssi"

WINDOWNAME="irssi"
SESSIONNAME=${WINDOWNAME}

tty -s && TTY=true || TTY=false
ttyprint()
{
    ${TTY} && printf -- '%s: %s\n' "${0##*/}" "${1}"
}

start_irssi()
{
    ttyprint 'Starting irssi...'
    if ( ${TMUX} new-session -d -s "${SESSIONNAME}" "${IRSSI}" && ${TMUX} rename-window -t "${SESSIONNAME}:0" "${SESSIONNAME}" ); then
        ttyprint ' done.'
        return 0
    else
        ttyprint ' failed.'
        return 1
    fi
}

attach_irssi()
{
    if ${TTY}; then
        ttyprint 'Attaching irssi...'
        if printf -- '\033]0;%s\007' ${WINDOWNAME} && ${TMUX} attach-session -t "${SESSIONNAME}"; then
            ttyprint ' done.'
            return 0
        else
            ttyprint ' failed.'
            return 1
        fi
    elif ${TERMINAL} -title "${WINDOWNAME}" -e ${TMUX} attach-session -t "${SESSIONNAME}"; then
        return 0
    else
        return 1
    fi
}

raise_irssi()
{
    ttyprint 'Searching for available session...'
    if WID=$(xdotool search --limit 1 --name "^${WINDOWNAME}$"); then
        ttyprint ' found, activating.'
        xdotool windowactivate "${WID}"
        return 0
    else
        ttyprint ' not found.'
        return 1
    fi
}

! raise_irssi && ! attach_irssi && start_irssi && attach_irssi

간단히 말해서 xdotool(패키지: xdotoolDebian)을 사용하여 제목이 "irssi"인 창을 검색한 다음 해당 창을 활성화합니다. 귀하의 요구 사항에 더 잘 맞는 경우 검색할 수 있는 창 이름 이외의 다른 속성이 있습니다.

나는 터미널이 처음 시작될 때 터미널 이름을 "irssi"로 지정하기 위해 작은 "트릭"을 사용하고 있습니다( printf의 설명 참조 attach_irssi()).

마지막 줄은

  1. 기존 터미널 세션을 올리고, 세션을 찾을 수 없는 경우
  2. 기존 tmux세션을 첨부하고, 찾을 수 없는 경우
  3. 세션 을 시작한 tmux다음
  4. 그것을 첨부하십시오.

나는 이 스크립트를 Mod4+ 에 바인딩합니다 I. (정확한 방법은 창 관리자에게 달려 있습니다.)

약간의 노력을 기울이면 귀하의 사례로 전환하는 것이 가능할 것입니다.


편집하다:attach_irssi특히 tmux나 GNU Screen을 사용하지 않는 경우 전체 기능을 제거할 수 있습니다 . SSH를 통해 또는 irssi 플러그인으로 실행하지 않으면 TTY논리를 쉽게 버릴 수 있습니다. 매우 압축되어 있으며 이는 tmux 없이 irssi에서 작동합니다(그러나 테스트되지 않았습니다).

#!/bin/sh
TERMINAL="/usr/bin/urxvtc"
IRSSI="/usr/bin/irssi"
WINDOWNAME="irssi"
SESSIONNAME=${WINDOWNAME}

start_irssi()
{
    ${TERMINAL} -title "${WINDOWNAME}" -e "${IRSSI}"
}

raise_irssi()
{
    if WID=$(xdotool search --limit 1 --name "^${WINDOWNAME}$"); then
        xdotool windowactivate "${WID}"
        return 0
    else
        return 1
    fi
}

! raise_irssi && start_irssi

답변2

gconf-editor가 아직 설치되어 있지 않은 경우:

sudo apt-get install gconf-editor

그런 다음 일반 사용자로 실행합니다(바로가기는 사용자별 설정입니다).

gconf-editor

원하는 작업을 수행하기 위해 자리 표시자 명령 중 하나를 사용할 것이므로 다음으로 이동하십시오.

apps > metacity > keybinding_commands

command_1선택한 명령을 실행하려면 이를 선택 하고 편집하세요.

/usr/bin/vim

그런 다음

apps > metacity > global_keybindings

command_1사용하려는 키의 값을 찾아 변경합니다.

<Control><Alt>v

(control-v가 다른 작업에 사용되는 붙여넣기에는 control-shift-v가 자주 사용되므로 이것을 Control-alt-v로 변경했습니다.)

답변3

@Daniel_Andersson의 답변을 바탕으로 이것은 Firefox 창을 띄우기 위해 키보드 단축키에 바인딩한 스크립트입니다(전환하기 전에 어떤 화면에 있었는지 쉽게 잊어버리기 때문에 마우스를 그 위로 가져옵니다).

#!/bin/bash
if WIDS=$(xdotool search --name 'Firefox$'); then
  for WID in $WIDS
  do
    if $(xwininfo -id $WID | grep -q IsViewable) 
    then
        xdotool windowactivate "${WID}" mousemove --window "${WID}" 50 50 
        break
    fi
  done
else
    notify-send "Firefox not running" 
fi

Firefox는 항상 에 많은 결과를 반환하기 때문에 xdotools실제 창인 것을 찾아야 합니다. 나는 xwininfo(package ) 가 첫 번째로 볼 수 있는 창을 찾는 데 사용하는 x11-utils유용한 플래그를 반환했다는 것을 발견했습니다 . (패키지 IsViewable) 는 물론 선택 사항입니다. 비활성 상태인 경우 Firefox 세션을 시작할 수도 있습니다(@Daniel_Andersson의 스크립트 참조).notify-sendlibnotify-bin

관련 정보