4月7日更新:別のバージョンが追加され、Albertが見つかりました。更新とボーナスをご覧ください!!!
ダッシュ機能に関して:「新しいウィンドウを開く前にこれを確認するためにランチャーのデフォルトの動作を変更する必要がありますか」と尋ねました。基本的な答えは、いや、通常のユーザーとしては、その動作をダッシュに追加する方法はありません。ただし、それを実装するユニティスコープ開発者がいる場合は、解決策と学習意欲がある場合は、それらにアプローチするか、自分で開発することができます。私のコーディングスキルは非常に控えめであるため、回避策としてシェルスクリプトと利用可能なグラフィカルフロントエンドを使用します。
関連情報
元の投稿:
私は、Zenityダイアログとwmctrlを使用して、あなたが求めたものを達成するスクリプトを書きました。これはグラフィカルスクリプトであることに注意してください。つまり、GUIのウィンドウでのみ機能し、ttyで何かを起動しようとしても機能しません。その上、私が理解していることから、アルフレッドはまったく同じことをしています。ここおよびここで説明するように、デスクトップショートカットまたはランチャーショートカットを作成できます。
スクリプト:
#!/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
補足:以前のバージョンでは、スクリプトはecho $?を使用して、以前の式が正常に終了したかどうかをテストしました。(編集からの)muruの提案に従って、コードをややコンパクトなバージョンに変更したので、以前のバージョンと現在のバージョンを確認することをお勧めします。
また、以前wmctrl -a $MYPROG
はgoogle-chromeまたはクロムブラウザのテストでは機能しませんでした。いくつかのばかげた理由で、一部のプログラムはウィンドウのWM_CLASSプロパティが大文字になっていますが、でリストされているプログラムdpkg --get-selections
は小文字です(読んman wmctrl
で実行するだけwmctrl -lx
です)。-axを追加することでこれを処理できます。スクリプトは、既に開いているクロムウィンドウを表示します
別のこと-wmctlrは時々遅延を必要とする(別のスクリプトでそれを経験した)という点でやや奇妙なので、sleep 1
行を追加する必要がありました。以前は、Firefoxでオンとオフを切り替えることができましたが、現在は泳ぎながら動作します。
動作中のスクリプト
以下のアニメーションでは、スクリプトの最初の実行時に、Firefoxのインスタンスが1つ開いており、スクリプトがそのウィンドウにフォーカスを切り替えていることがわかります。2番目のテストでは、これまで開かれていないgoogle-chromeの新しいインスタンスを開きます。(サイドノート:ちなみに、デスクトップについては、カイロドックを備えたオープンボックスです)
コメントの提案ごとに、埋め込みアニメーションが削除され、リンクのみが投稿されました。壊れている場合は報告してください!
http://i.stack.imgur.com/puuPZ.gif
更新、4月7日
zenityのドロップダウンエントリボックスにリストされているすべてのプログラムを作成するために、スクリプトをいくらか改善しました。これで、ユーザーは各プログラムを記憶する必要がなくなりましたが、矢印キーを使用してそれらのリストをスクロールするか、ドロップダウンメニューを開くだけで済みます。また、この改善されたバージョンは、名前ではなくウィンドウIDによってウィンドウを上げるため、パフォーマンスが大幅に向上します。注:.desktopファイルを使用する方法は、cutコマンドを2回使用することで冗長になりますが、これまでのscript-fuはそれほど良くないので、これがすべてです。改善のための提案を歓迎します!
#!/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
ボーナス:
実際には、AlfredのLinuxバージョンであるAlbertを見つけましたが、自分で試したことはありません。しかし、チェックアウトする価値があります。しかし、ジェイコブがすでに指摘したように、まだバグがあります。
Gnome-Doと呼ばれるアプリがあります。これは、Alfredにグラフィカルに似ていますが、このスクリプトと同じ機能はありません。
このスクリプトが気に入った場合、修正が必要な場合はお知らせください。役立つと思われる場合は、回答を忘れずに投票してください。