나는 일반적으로 내 워크스테이션에서 여러 응용 프로그램을 실행하고 있습니다. 보통 나는필요 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(패키지: xdotool
Debian)을 사용하여 제목이 "irssi"인 창을 검색한 다음 해당 창을 활성화합니다. 귀하의 요구 사항에 더 잘 맞는 경우 검색할 수 있는 창 이름 이외의 다른 속성이 있습니다.
나는 터미널이 처음 시작될 때 터미널 이름을 "irssi"로 지정하기 위해 작은 "트릭"을 사용하고 있습니다( printf
의 설명 참조 attach_irssi()
).
마지막 줄은
- 기존 터미널 세션을 올리고, 세션을 찾을 수 없는 경우
- 기존
tmux
세션을 첨부하고, 찾을 수 없는 경우 - 세션 을 시작한
tmux
다음 - 그것을 첨부하십시오.
나는 이 스크립트를 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-send
libnotify-bin