Vincular acceso directo para abrir la ventana de una aplicación específica

Vincular acceso directo para abrir la ventana de una aplicación específica

Normalmente tengo varias aplicaciones ejecutándose en mi estación de trabajo. Usualmente yonecesidad VIMGoogle Chromey Terminalalgunas 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 VIMcon 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 printfdeclaraciones 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: xdotoolen 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 printfdeclaración en attach_irssi()).

La última línea intenta

  1. Inicie una sesión de terminal existente y, si no la encuentra,
  2. adjunte una tmuxsesión existente y, si no la encuentra
  3. iniciar una tmuxsesión y luego
  4. 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_irssifunció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 TTYló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_1y edítelo para ejecutar el comando elegido:

/usr/bin/vim

Luego ve a

apps > metacity > global_keybindings

Busque command_1y 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 IsViewablebandera ú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).

información relacionada