Perbarui 7 April: Versi yang berbeda ditambahkan dan ditemukan Albert, lihat pembaruan dan Bonus di bawah !!!
Mengenai fungsionalitas dasbor : Anda telah bertanya " Apakah ada untuk mengubah perilaku default peluncur untuk memeriksa ini sebelum membuka jendela baru ". Jawaban dasarnya adalah, tidak, sebagai pengguna biasa Anda tidak memiliki cara untuk menambahkan perilaku itu ke tanda hubung. Namun, jika akan ada pengembang ruang lingkup persatuan 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 grafis front-end yang tersedia untuk skrip sebagai solusi.
Informasi terkait
Pos asli:
Saya telah menulis sebuah skrip yang menggunakan dialog zenity dan wmctrl untuk mencapai apa yang Anda minta. Perhatikan bahwa ini adalah skrip grafis, artinya skrip hanya akan berfungsi dengan windows, di GUI, dan tidak akan berfungsi jika Anda mencoba meluncurkan sesuatu dalam tty. Selain itu, dari apa yang saya mengerti, Alfred melakukan hal yang persis sama. Anda dapat membuat pintasan desktop atau pintasan peluncur untuknya, seperti dijelaskan di sini dan di sini .
Naskah:
#!/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 /ubuntu//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 samping: dalam versi sebelumnya, skrip menggunakan echo $ ?, untuk menguji apakah ekspresi sebelumnya berhasil keluar. Sesuai saran muru (dari hasil edit), saya mengubah kodenya ke versi yang lebih ringkas, jadi saya sarankan Anda melihat pada versi sebelumnya dan saat ini.
Juga, sebelumnya wmctrl -a $MYPROG
tidak bekerja dengan pengujian google-chrome atau chromium-browser; untuk beberapa alasan bodoh beberapa program memiliki properti WM_CLASS dari jendela dengan dpkg --get-selections
huruf besar , sedangkan program seperti yang tercantum dalam huruf kecil (hanya membaca man wmctrl
dan menjalankan wmctrl -lx
, Anda akan tahu). Menambahkan bahwa -ax harus menangani ini. Script menampilkan jendela chromium yang sudah terbuka sebagaimana mestinya
Hal lain - wmctlr agak aneh karena kadang-kadang perlu penundaan (punya pengalaman dengan itu di skrip lain), jadi saya harus menambahkan sleep 1
baris. Sebelumnya akan menjadi semacam dan mematikan dengan firefox, tetapi sekarang berfungsi dengan baik.
Script beraksi
Dalam animasi di bawah ini, Anda dapat melihat bahwa pada menjalankan pertama skrip, ada satu contoh open firefox, dan skrip beralih fokus ke jendela itu; pada tes kedua, saya membuka contoh baru google-chrome, yang belum pernah dibuka sebelumnya. (Catatan: Jika Anda curiga tentang desktop, omong-omong, itu adalah openbox dengan cairo dock)
Per saran dalam komentar, animasi tersemat dihapus, hanya tautan yang diposting. Laporkan jika rusak, tolong!
http://i.stack.imgur.com/puuPZ.gif
Pembaruan, 7 April
Saya sedikit memperbaiki skrip untuk membuat semua program yang terdaftar di kotak masuk drop-down zenity. Sekarang pengguna tidak harus mengingat setiap program, tetapi cukup menggulir daftar mereka menggunakan tombol panah atau hanya membuka menu drop down. Juga, versi yang ditingkatkan ini memunculkan windows 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, tapi karena skrip-fu saya tidak begitu baik sejauh ini, 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 /ubuntu//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:
Saya sebenarnya telah menemukan Albert , yang merupakan versi Linux dari Alfred, tetapi belum mencobanya sendiri. Layak untuk dicoba. Namun, seperti yang sudah dicatat Yakub, masih buggy.
Ada sebuah aplikasi bernama Gnome-Do, yang secara grafik terlihat mirip dengan Alfred, namun tidak memiliki fungsi yang sama dengan skrip ini.
Beri tahu saya jika Anda menyukai skrip ini, jika ada sesuatu yang perlu diperbaiki, dan jangan lupa untuk memperbaiki jawabannya jika Anda merasa bermanfaat