Normalerweise habe ich mehrere Anwendungen auf meiner Workstation laufen. Normalerweisebrauchen VIM
, Google Chrome
und Terminal
einige andere Anwendungen, die ich nicht immer brauche, z. B. E-Mail-Client, IM, VLC usw.
Es wäre sehr praktisch, wenn ich VIM
mit nur einer Tastenkombination (beispielsweise Ctrl+ Shift+ V) zu Anwendungen wechseln könnte, die ich ständig brauche.
Wie kann das erreicht werden?
Antwort1
Dies ist ein Skript, das ich verwende, um dies mit irssi zu tun. Es enthält zusätzliche Logik, da ich es innerhalb einer tmux-Sitzung verwende, aber einige Teile sind anwendbar. Es enthält tatsächlich auch Code, um es remote über SSH funktionieren zu lassen und die GUI-Benachrichtigung über neue irssi-Nachrichten zu steuern, aber ich habe versucht, das der Übersichtlichkeit halber herauszuschneiden (einschließlich Verwendungsanweisungen und Argumentbehandlung). Ich lasse einige Debuganweisungen stehen 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
Kurz gesagt verwendet es xdotool (Paket: xdotool
in Debian), um nach einem Fenster mit dem Titel „irssi“ zu suchen und aktiviert dann dieses Fenster. Es gibt andere Eigenschaften als den Fensternamen, nach denen gesucht werden kann, wenn diese Ihren Anforderungen besser entsprechen.
Ich verwende einen kleinen „Trick“, um das Terminal beim ersten Start „irssi“ zu nennen (siehe Anweisung printf
in attach_irssi()
).
Die letzte Zeile versucht
- Starten Sie eine bestehende Terminalsitzung, und wenn nicht gefunden
- eine bestehende
tmux
Sitzung anhängen, und wenn nicht gefunden - eine Sitzung starten
tmux
und dann - hänge es an.
Ich binde dieses Skript an Mod4+ I(wie genau dies geschieht, hängt von Ihrem Fenstermanager ab).
Mit etwas Aufwand sollte es möglich sein, dies auf Ihren Fall umzurechnen.
BEARBEITEN:Insbesondere können Sie die gesamte Funktion entfernen, attach_irssi
wenn Sie tmux oder GNU Screen nicht verwenden. Wenn Sie es nicht über SSH oder als irssi-Plugin ausführen, können Sie die TTY
Logik einfach weglassen. Sehr komprimiert würde dies für irssi ohne tmux funktionieren (ist aber ungetestet):
#!/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
Antwort2
Wenn Sie gconf-editor noch nicht installiert haben:
sudo apt-get install gconf-editor
Starten Sie es dann als normaler Benutzer (Verknüpfungen sind benutzerspezifische Einstellungen):
gconf-editor
Wir werden einen der Platzhalterbefehle verwenden, um das Gewünschte zu tun. Navigieren Sie also zu:
apps > metacity > keybinding_commands
Wählen Sie es aus command_1
und bearbeiten Sie es, um den gewünschten Befehl auszuführen:
/usr/bin/vim
Dann geh zu
apps > metacity > global_keybindings
Suchen command_1
und ändern Sie den Wert in den Schlüssel, den Sie verwenden möchten:
<Control><Alt>v
(Ich habe dies in Strg-Alt-V geändert, da Strg-Umschalt-V häufig zum Einfügen verwendet wird, während Strg-V für andere Dinge verwendet wird.)
Antwort3
Basierend auf der Antwort von @Daniel_Andersson ist dies das Skript, das ich an meine Tastaturkürzel gebunden habe, um das Firefox-Fenster zu öffnen (und die Maus darüber zu bewegen, weil ich leicht vergesse, auf welchem Bildschirm es sich vor dem Wechseln befand).
#!/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
Da Firefox immer eine Reihe von Ergebnissen zurückgibt xdotools
, muss man eines finden, das ein tatsächliches Fenster ist. Ich habe festgestellt, dass xwininfo
(Paket x11-utils
) ein nützliches IsViewable
Flag zurückgegeben hat, das ich verwende, um das erste sichtbare Fenster zu finden. Das notify-send
(Paket libnotify-bin
) ist natürlich optional, man könnte auch eine Firefox-Sitzung starten, wenn es inaktiv ist (siehe das Skript von @Daniel_Andersson).