Tasto di scelta rapida / scorciatoia personalizzato per aprire / portare in primo piano un'app


11

Non immagino che questo sia integrato nel sistema, ma è possibile farlo senza troppe seccature?

Dire che apro un programma specifico con un tasto di scelta rapida e quando premo di nuovo quel tasto di scelta rapida, la finestra del programma viene visualizzata in primo piano.

Voglio farlo su Ubuntu 9.04.

Forse con D-Bus? Qualche esperto?

Aggiornamento : ecco cosa ho finito nel caso in cui fosse di aiuto a qualcuno:

#!/bin/bash
if [ -f "/tmp/myterm.pid" ]; then
  WID=`cat /tmp/myterm.pid`
  xdotool windowactivate $WID
  if [ "$?" != "0" ]; then
    WID=""
  fi
else
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
fi

if [ "$WID" == "" ]; then
  /usr/bin/gnome-terminal --window-with-profile=MYPROFILE "$@"
  WID=`xdotool search --title "UNIQUE TITLE" | head -1`
  echo $WID > /tmp/myterm.pid
else
  xdotool windowactivate $WID
fi

Sicuramente può essere semplificato, ma io non sono un bashmago. Inoltre, per far funzionare il mio esempio, ho creato un profilo personalizzato in Terminale che applica un titolo univoco alla finestra in modo che possa essere trovato in un secondo momento. Le possibilità sono infinite!


1
Per questa semplice attività, il metodo di jtb funziona meglio, perché a volte xdotools genera errori X e wmctrl è più veloce.
Ivan

Risposte:


10

Il wmctrlprogramma è proprio quello che stai cercando ( sudo apt-get install wmctrl). Puoi usare il wmctrl -a "AppTitle"comando per portare l'app in primo piano. wmctrl -lelencherà tutte le finestre disponibili, quindi dovrebbe essere facile scrivere uno script di shell che controlla se il programma è in esecuzione e lo avvia o lo porta in primo piano. Quindi puoi semplicemente associarlo a una scorciatoia da tastiera.

In primo luogo salvare il seguente script da qualche parte, userò /home/jtb/code/bringToFront. Sono necessari due argomenti, il primo è quello che si digita sul terminale per avviare il programma, il secondo è una sottostringa del titolo della finestra del programma. Se nel titolo non è presente una stringa univoca costante, dovrai trovare un po 'più di lavoro per trovare la finestra del programma.

#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]  
then
    wmctrl -a "$2"
else
    $1 &
fi
  1. Con lo script nella directory corrente, esegui chmod +x bringToFrontper rendere eseguibile lo script. Quindi assicurati che funzioni; per avviare / focalizzare Firefox che potresti eseguire ./bringToFront firefox "Mozilla Firefox".

  2. Ora dobbiamo associare un tasto di scelta rapida. Esegui gconf-editore naviga nella struttura delle cartelle a sinistra per /apps/metacity/keybinding_commands.

  3. Fare doppio clic sul primo commandcon un valore vuoto, probabilmente command_1. Digitare il percorso completo dello script e fornire i due parametri, ad es /home/jtb/code/bringToFront firefox Firefox.

  4. Dal pannello a sinistra, selezionare global_keybindings, la cartella successiva in alto. Trova la runvoce corrispondente al comando che hai appena definito, probabilmente run_command_1. Fare doppio clic su di esso e digitare la scorciatoia da tastiera che si desidera utilizzare. Metti i modificatori tra parentesi angolari, ad es <Ctrl><Alt>F.

Ora Control+ Alt+ Fporterà la finestra di Firefox in primo piano o la lancerà se non è già in esecuzione.


Sì, l'ho scoperto un paio di minuti fa, ma sono andato con xdotool. Grazie!
Ivan

Ho dimenticato di menzionare che ho anche usato le scorciatoie e i comandi globali in gconf per realizzare pienamente l'effetto (console Quake di un povero uomo!).
Ivan

Ah, sì, non ho usato xdotool da solo, ma sembra che ti darebbe un po 'più di flessibilità. Un buon punto su gconf. Dal momento che è abbastanza ovvio, potrei anche modificare la risposta per includere ulteriori dettagli per chiunque voglia fare questo.
jtb

Console di Quake di Poort Man? Intendi come Tilda? freshmeat.net/projects/tilda
prestomation

Sì, uso anche Tilda, ma lavoro su diversi progetti nel corso della settimana e per ognuno apro sempre tre o quattro schede, quindi passare rapidamente alla console del progetto ("area di lavoro") senza ingombrare Tilda è molto utile per me.
Ivan,

3

Ecco un altro modo per farlo xdotools. Il processo di pop-up è riconosciuto dalla riga di comando emessa per eseguirlo (non è necessario alcun file pid o titolo finestra univoco).

#!/bin/bash

cmd="$@"
# command line to be run. Note that the resulting
# process will hold this in /proc/PID/cmdline 

pid=`pgrep -nf "^$cmd$"`
# most recent process having "$cmd" in /proc/PID/cmdline

if [ -z "$pid" ]; then # no pid
    exec $cmd
    # run command
else
    winid=`xdotool search --all --pid $pid --onlyvisible | head -1`
    # first visible window owned by pid
    xdotool windowactivate $winid
    # give window focus
fi


0

La risposta inviata da jtb in precedenza è eccellente, ma a volte vorresti corrispondere a titoli esatti (ad esempio, vuoi aprire "GitKraken" ma il titolo del tuo browser "GitKraken vs CLI" corrisponde anche alla query).

#!/bin/bash
if [ $1 == "-exact" ]
then
    additional_arguments="-F "
    app_launch_command=$2
    app_title=$3
else
    additional_arguments=""
    app_launch_command=$1
    app_title=$2
fi

if [ `wmctrl -l $additional_arguments| grep -c "$app_title"` != 0 ]
then
    wmctrl $additional_arguments -a "$app_title"
else
    $app_launch_command &
fi

Quindi ora puoi chiamare il tuo script bringToFront come segue:

#exact match
./bringToFront.sh -exact "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh -exact <command_to_launch_the_app> <app_title

#partial match like the old script
./bringToFront.sh "flatpak run com.axosoft.GitKraken" "GitKraken"
#or
./bringToFront.sh <command_to_launch_the_app> <app_title>

0

Questa soluzione non è parametrizzata, ma l'ho usata per mettere a fuoco o avviare il calcolatore gnome.

L'opzione -R trova la finestra o non riesce, se trovata viene spostata sul desktop corrente, sollevata e focalizzata. Il nome della calcolatrice gnome è la finestra con il nome Calcolatrice , potrebbe essere facilmente parametrizzato, ma non ho mai trovato la necessità di farlo. L'ho mappato a Ctrl-Alt-c.

#!/bin/bash
# start the calculator and raise and focus (requires wmctrl)
# X Tian 06sep2017 created

wmctrl -R Calculator
if [[ $? -ne 0 ]]
  then 
    gnome-calculator &
fi

0

Ho avuto lo stesso problema e poiché non ho trovato alcuna soluzione adatta, ne ho creato uno:

https://hyperkeys.xureilab.com

https://github.com/xurei/hyperkeys

È possibile bloccare una finestra con un collegamento definito. Personalmente uso MAIUSC + ALT + [QWER] per bloccare e ALT + [QWER] per portare in primo piano. Tuttavia, non puoi aprire l'app se non è aperta.

Questo è uno strumento open source per Linux. È anche disponibile una versione per Windows.

Spero che sia d'aiuto ! Sto cercando feedback, quindi se hai qualche domanda, crea un problema ;-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.