GNU/Linux >> Belajar Linux >  >> Ubuntu

Luncurkan Aplikasi Hanya Jika Belum Terbuka?

Saya ingin meniru penggunaan Alfred di Mac OS X, di mana jika Anda mencoba membuka aplikasi setelah mencarinya, itu hanya akan membuka jendela baru jika program belum berjalan, jika tidak maka akan mengatur fokus pada saat ini menjalankan instance dari aplikasi itu. Apakah ada cara untuk mengubah perilaku default peluncur untuk memeriksanya sebelum membuka jendela baru?

Jawaban Terbaik

Perbarui 7 April Versi berbeda ditambahkan dan ditemukan Albert, lihat pembaruan dan Bonus di bawah !!!

Mengenai fungsi tanda hubung :
Anda bertanya ” Apakah ada cara untuk mengubah perilaku default peluncur untuk memeriksanya sebelum membuka jendela baru “. Jawaban dasarnya adalah, tidak, sebagai pengguna biasa Anda tidak memiliki cara untuk menambahkan perilaku itu ke tanda hubung. Namun, jika ada pengembang lingkup kesatuan yang bersedia menerapkannya, Anda dapat mendekati mereka atau mengembangkannya sendiri jika Anda memiliki tekad dan mau belajar. Keterampilan pengkodean saya sangat sederhana, oleh karena itu saya menggunakan skrip shell dan front-end grafis yang tersedia untuk skrip sebagai solusi.

Informasi terkait

Pos asli:

Saya telah menulis skrip yang menggunakan dialog zenity dan wmctrl untuk mencapai apa yang Anda minta. Perhatikan bahwa ini adalah skrip grafis, artinya ini hanya akan berfungsi dengan windows, di GUI, dan tidak akan berfungsi jika Anda mencoba meluncurkan sesuatu di tty. Selain itu, dari apa yang saya pahami, Alfred melakukan hal yang persis sama. Anda dapat membuat pintasan desktop ke sana atau pintasan peluncur ke sana, seperti yang dijelaskan di sini dan di sini.

Skrip:

#!/bin/bash
# Author: Serg Kolo
# Description: A launcher script that checks whether
#       or not a window of a particular program already exists
#       If a window of such program is open, bring it to focus
#       Otherwise - launch a new window
#       Written for https://askubuntu.com/q/440142/295286
# Date: April 6 , 2015
#


MYPROG=$( zenity --entry --title='MY LAUNCHER' --text='Type the name of application to run' )
sleep 0.5
wmctrl -lx | awk '{print $3}' | grep -i "$MYPROG"

if [ $? -eq 0 ]; then
    sleep 1         
    wmctrl -xa $MYPROG
   #as an alternative try the line bellow
   #wmctrl -a $MYPROG
    exit 1
else 
    $MYPROG &
    exit 0
fi

Catatan tambahan: di versi sebelumnya, skrip menggunakan echo $?, untuk menguji apakah ekspresi sebelumnya berhasil keluar. Sesuai saran muru (dari edit), saya mengubah kode menjadi versi yang lebih ringkas, jadi saya sarankan Anda melihat versi sebelumnya dan saat ini.

Juga , sebelumnya wmctrl -a $MYPROG tidak berfungsi dengan pengujian google-chrome atau chromium-browser; untuk beberapa alasan bodoh beberapa program memiliki properti WM_CLASS dari jendela dengan huruf kapital , sedangkan program seperti yang terdaftar oleh dpkg --get-selections huruf kecil (cukup baca man wmctrl dan jalankan wmctrl -lx , Anda akan tahu). Menambahkan -ax itu harus menangani ini. Script menampilkan jendela chromium yang sudah terbuka sebagaimana mestinya

Hal lain - wmctlr agak aneh karena kadang-kadang perlu penundaan (berpengalaman dengan itu di skrip lain), jadi saya harus menambahkan sleep 1 garis. Sebelumnya ini akan hidup dan mati dengan firefox, tetapi sekarang berfungsi dengan baik.

Terkait:Bluetooth di Ubuntu 16.04?

Skrip beraksi

Dalam animasi di bawah ini Anda dapat melihat bahwa pada menjalankan skrip pertama, ada satu contoh firefox terbuka, dan skrip mengalihkan fokus ke jendela itu; pada pengujian kedua, saya membuka instance baru dari google-chrome, yang belum pernah dibuka sebelumnya.
(Catatan tambahan:Jika Anda penasaran dengan desktop, omong-omong, itu adalah openbox dengan kairo dock)

Per saran di komentar, animasi yang disematkan dihapus, hanya tautan yang diposting. Laporkan jika rusak, tolong! http://i.stack.imgur.com/puuPZ.gif

Pembaruan, 7 April

Saya sedikit meningkatkan skrip untuk membuat semua program terdaftar di kotak entri drop-down zenity. Sekarang pengguna tidak perlu menghafal setiap program, tetapi cukup menggulir daftarnya menggunakan tombol panah atau cukup buka menu tarik-turun. Juga, versi yang ditingkatkan ini memunculkan jendela bukan berdasarkan nama, tetapi berdasarkan id jendela, yang memberikan kinerja yang jauh lebih baik. Catatan, cara saya menelusuri file .desktop agak berlebihan, menggunakan perintah cut dua kali, tetapi karena skrip-fu saya sejauh ini tidak terlalu bagus, hanya ini yang bisa saya lakukan. Saran untuk perbaikan dipersilahkan!

#!/bin/bash
# Author: Serg Kolo
# Description: Second version of a launcher script that checks whether
#       or not a window of a particular program already exists
#       If a window of such program is open, bring it to focus
#       Otherwise - launch a new window
#       Written for https://askubuntu.com/q/440142/295286
# Date: April 7 , 2015
#

set -x

MYPROG=$(zenity --entry --text 'Select program from list' --entry-text $(ls /usr/share/applications/*.desktop | cut -d'/' -f5 | cut -d'.' -f1 | xargs echo))
sleep 0.5
# Do we have a window of such program ?
wmctrl -lx| awk '{print $3}'  | grep -i $MYPROG

if [ $? -eq 0 ]; then
    sleep 0.5 # if yes, find that window id, and raise it
    WINID=$(wmctrl -lx | grep -i $MYPROG | awk 'NR==1{print $1}')
    wmctrl -ia $WINID &
 #  exit 0  
else
    echo $MYPROG | grep -i libreoffice
    if [ $? -eq 0  ]
    then
        MYPROG=$(echo $MYPROG | sed 's/-/ --/g')
    fi
    $MYPROG &

#  exit 0 
fi

Bonus:

Sebenarnya saya sudah menemukan Albert , yang merupakan versi Linux dari Alfred, tetapi belum mencobanya sendiri. Layak untuk dicoba. Namun, seperti yang sudah dicatat Jacob, ini masih bermasalah.

Ada aplikasi bernama Gnome-Do, yang secara grafis terlihat mirip dengan Alfred, namun tidak memiliki fungsi yang sama dengan skrip ini.

Beri tahu saya jika Anda menyukai skrip ini, jika ada yang perlu diperbaiki, dan jangan lupa untuk memberikan jawaban jika Anda merasa berguna


Ubuntu
  1. Apache 2 Tidak Dapat Mengikat, Alamat Sudah Digunakan?

  2. Keepassx 0.4.3 Pada 11.10 (unity) Tidak Terlihat Di Pengalih Tugas (alt-tab)?

  3. Xubuntu Libre Office Calc Tidak Dapat Membuka File Jaringan?

  1. Cara membuka Appimage di Linux

  2. Bagaimana Cara Membuat Alt-w Menutup Tab Saat Ini, Bukan Jendela Saat Ini, Di Gnome Shell?

  3. Menambahkan baris ke file hanya jika belum ada

  1. Buka Cl Di Intel?

  2. Mengapa File (nautilus) Membuka Jendela Baru Meskipun Sudah Ada Yang Terbuka?

  3. Emulator -avd Tidak Meluncurkan Perangkat Virtual?