Tombol pintas / pintasan khusus untuk membuka / membawa ke depan aplikasi

11

Saya tidak membayangkan ini dibangun ke dalam sistem, tetapi apakah mungkin melakukannya tanpa terlalu banyak kesulitan?

Katakanlah saya membuka program tertentu dengan hotkey, dan ketika saya menekan hotkey itu lagi, jendela program dibawa ke depan.

Saya ingin melakukan ini di Ubuntu 9.04.

Mungkin dengan D-Bus? Adakah pakar?

Pembaruan : Inilah yang saya hasilkan seandainya bermanfaat bagi seseorang:

#!/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

Tentunya itu bisa disederhanakan, tapi saya bukan bashahli. Juga, agar contoh saya berfungsi, saya membuat profil khusus di Terminal yang menerapkan judul unik ke jendela sehingga dapat ditemukan nanti. Kemungkinannya tidak terbatas!

Ivan
sumber
1
Untuk tugas sederhana ini, metode jtb bekerja lebih baik, karena xdotools terkadang melempar kesalahan X, dan wmctrl lebih cepat.
Ivan

Jawaban:

10

The wmctrlProgram hanya apa yang Anda cari ( sudo apt-get install wmctrl). Anda dapat menggunakan wmctrl -a "AppTitle"perintah untuk membawa aplikasi ke depan. wmctrl -lakan mencantumkan semua jendela yang tersedia, jadi seharusnya mudah untuk menulis skrip shell yang memeriksa apakah program Anda berjalan dan apakah meluncurkan atau membawanya ke depan. Kemudian Anda bisa mengikatnya ke pintasan keyboard.

Pertama-tama simpan skrip berikut di suatu tempat, saya akan gunakan /home/jtb/code/bringToFront. Dibutuhkan dua argumen, yang pertama adalah apa yang Anda ketik di terminal untuk meluncurkan program, yang kedua adalah substring dari judul jendela program. Jika tidak ada string unik konstan dalam judul maka Anda harus melakukan sedikit lebih banyak pekerjaan untuk menemukan jendela program.

#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]  
then
    wmctrl -a "$2"
else
    $1 &
fi
  1. Dengan skrip di direktori Anda saat ini, jalankan chmod +x bringToFrontuntuk membuat skrip dapat dieksekusi. Kemudian pastikan itu berfungsi; untuk meluncurkan / memfokuskan firefox Anda dapat menjalankan ./bringToFront firefox "Mozilla Firefox".

  2. Sekarang kita perlu mengikat tombol pintas. Jalankan gconf-editordan navigasikan struktur folder ke kiri ke /apps/metacity/keybinding_commands.

  3. Klik dua kali pada yang pertama commanddengan nilai kosong, mungkin command_1. Ketikkan path lengkap ke skrip dan berikan dua parameter, mis /home/jtb/code/bringToFront firefox Firefox.

  4. Dari panel di sebelah kiri, pilih global_keybindings, folder berikutnya ke atas. Cari runentri yang cocok dengan perintah yang baru saja Anda tentukan, mungkin run_command_1. Klik dua kali dan ketik pintasan keyboard yang ingin Anda gunakan. Letakkan pengubah dalam kurung sudut, misalnya <Ctrl><Alt>F.

Sekarang Control+ Alt+ Fakan membawa jendela firefox Anda ke depan, atau meluncurkannya jika belum berjalan.

jtb
sumber
Ya, saya mengetahuinya beberapa menit yang lalu, tetapi saya menggunakan xdotool. Terima kasih!
Ivan
Saya lupa menyebutkan bahwa saya juga menggunakan pintasan dan perintah global di gconf untuk sepenuhnya mencapai efeknya (konsol Gempa orang miskin!).
Ivan
Ah, ya saya belum pernah menggunakan xdotool sendiri tetapi sepertinya itu akan memberi Anda lebih banyak fleksibilitas. Poin bagus tentang gconf. Karena itu sangat tidak jelas saya mungkin juga mengedit jawaban untuk memasukkan lebih banyak detail untuk orang lain yang ingin melakukan ini.
jtb
Konsol Gempa Poort Man? Maksudmu seperti Tilda? freshmeat.net/projects/tilda
prestomation
Ya, saya juga menggunakan Tilda, tetapi saya mengerjakan beberapa proyek sepanjang minggu, dan untuk setiap proyek saya selalu membuka tiga atau empat tab, jadi dengan cepat beralih ke konsol proyek ("ruang kerja") tanpa mengacaukan Tilda sangat berguna bagi saya.
Ivan
3

Inilah cara lain untuk melakukannya xdotools. Proses pop-up dikenali oleh baris perintah yang dikeluarkan untuk menjalankannya (tidak perlu file pid atau judul jendela unik).

#!/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
etuardu
sumber
0

Jawaban yang diposting oleh jtb sebelumnya sangat baik tetapi kadang-kadang Anda ingin mencocokkan judul yang tepat (misalnya Anda ingin membuka "GitKraken" tetapi judul browser Anda "GitKraken vs CLI" juga cocok dengan kueri).

#!/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

Jadi sekarang Anda dapat memanggil skrip bringToFront Anda seperti berikut:

#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>
Sufian
sumber
0

Solusi ini tidak diparameterisasi, tetapi saya telah menggunakannya untuk membawa-ke-fokus atau memulai kalkulator gnome.

Opsi -R menemukan jendela atau gagal, jika ditemukan dipindahkan ke desktop saat ini, dinaikkan dan diberikan fokus. Nama gnome-calculator adalah window dengan nama Calculator , ini dapat dengan mudah diparameterisasi, tetapi saya belum pernah menemukan kebutuhan untuk melakukannya. Saya sudah memetakannya 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
X Tian
sumber