
Normalmente tengo varias aplicaciones ejecutándose en mi estación de trabajo. Usualmente yonecesidad VIM
Google Chrome
y Terminal
algunas otras aplicaciones que no siempre necesito, por ejemplo, cliente de correo, mensajería instantánea, VLC, etc.
Sería muy útil si pudiera cambiar a las aplicaciones que siempre necesito VIM
con un solo acceso directo (digamos, Ctrl+ Shift+ V).
¿Cómo se puede lograr?
Respuesta1
Este es un script que uso para hacer esto con irssi, con lógica adicional ya que lo uso dentro de una sesión tmux, pero algunas partes son aplicables. En realidad, también contiene código para que funcione de forma remota a través de SSH y controle la notificación GUI de nuevos mensajes irssi, pero he intentado eliminarlo (incluidas las instrucciones de uso y el manejo de argumentos) para mayor claridad. Dejo algunas printf
declaraciones de depuración.
#!/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
En resumen, utiliza xdotool (paquete: xdotool
en Debian) para buscar una ventana con el título "irssi" y luego activa esa ventana. Hay otras propiedades además del nombre de la ventana que se pueden buscar si se ajustan mejor a sus necesidades.
Estoy usando un pequeño "truco" para nombrar la terminal "irssi" cuando se inicia por primera vez (consulte la printf
declaración en attach_irssi()
).
La última línea intenta
- Inicie una sesión de terminal existente y, si no la encuentra,
- adjunte una
tmux
sesión existente y, si no la encuentra - iniciar una
tmux
sesión y luego - adjuntarlo.
Vinculo este script a Mod4+ I(exactamente cómo se hace esto depende de su administrador de ventanas).
Con un poco de esfuerzo, esto debería ser posible convertirlo a su caso.
EDITAR:Específicamente, puedes eliminar la attach_irssi
función completa si no usas tmux o GNU Screen. Si no lo ejecuta a través de SSH o como un complemento irssi, puede descartar fácilmente la TTY
lógica. Muy condensado, esto funcionaría para irssi sin tmux (pero no está probado):
#!/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
Respuesta2
Si aún no tienes instalado gconf-editor:
sudo apt-get install gconf-editor
Luego ejecútelo como un usuario normal (los accesos directos son una configuración por usuario):
gconf-editor
Usaremos uno de los comandos de marcador de posición para hacer lo que quieras, así que navega hasta:
apps > metacity > keybinding_commands
Elíjalo command_1
y edítelo para ejecutar el comando elegido:
/usr/bin/vim
Luego ve a
apps > metacity > global_keybindings
Busque command_1
y cambie el valor a la clave que desea utilizar:
<Control><Alt>v
(Cambié esto a Control-alt-v ya que control-shift-v se usa a menudo para pegar donde control-v se usa para otras cosas).
Respuesta3
Según la respuesta de @Daniel_Andersson, este es el script que he vinculado a mis atajos de teclado para abrir la ventana de Firefox (y colocar el mouse sobre ella, porque olvidaré fácilmente en qué pantalla estaba antes de cambiar).
#!/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
Debido a que Firefox siempre devuelve una cantidad de resultados xdotools
, uno tiene que encontrar uno que sea una ventana real. Descubrí que xwininfo
(paquete x11-utils
) devolvió una IsViewable
bandera útil, que uso para encontrar la primera ventana visible. El notify-send
(paquete libnotify-bin
) es, por supuesto, opcional; también se puede iniciar una sesión de Firefox si está inactivo (consulte el script de @Daniel_Andersson).