4 월 7 일 업데이트 : 다른 버전이 추가되어 Albert를 찾았습니다. 업데이트 및 보너스 벨로우즈 참조!
대시 기능 관련 : " 새 창을 열기 전에이를 확인하기 위해 실행기의 기본 동작을 변경 하시겠습니까? " 기본 답변은 일반 사용자로서 해당 동작을 대시에 추가 할 수있는 방법이 없다는 것입니다. 그러나 그것을 구현할 의지가있는 단일 범위 개발자가 있다면, 해결하고 배우고 자한다면 그들에게 다가 가거나 직접 개발할 수 있습니다. 코딩 기술은 매우 겸손하므로 셸 스크립팅과 스크립트에 사용 가능한 그래픽 프런트 엔드를 해결 방법으로 사용합니다.
관련 정보
원본 게시물 :
나는 당신이 요구 한 것을 달성하기 위해 zenity dialogue와 wmctrl을 사용하는 스크립트를 작성했습니다. 이 스크립트는 GUI에서 Windows에서만 작동하며 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의 제안 (edit에서)에 따라 코드를 좀 더 컴팩트 한 버전으로 변경 했으므로 이전 버전과 현재를 살펴 보는 것이 좋습니다.
또한 이전 wmctrl -a $MYPROG
에는 google-chrome 또는 크롬 브라우저 테스트와 작동하지 않았습니다. 어리석은 이유로 일부 프로그램에는 대문자로 된 WM_CLASS 속성이 대문자로 표시되어 있지만 나열된 프로그램 dpkg --get-selections
은 소문자입니다 (읽고 man wmctrl
실행 wmctrl -lx
하면 알 수 있습니다). -ax를 추가하면이 문제를 해결해야합니다. 스크립트는 이미 열려있는 크롬 창을 불러옵니다.
또 다른 것은-wmctlr은 때로는 지연이 필요하다는 점에서 다소 이상합니다 (다른 스크립트에서 경험이 있었기 때문에) sleep 1
. 이전에는 파이어 폭스와 함께 일종의 켜기 및 끄기가되었지만 이제는 수영으로 작동합니다.
작동중인 스크립트
애니메이션 아래에서 스크립트를 처음 실행할 때 파이어 폭스 인스턴스가 하나 열리고 스크립트 스위치가 해당 창으로 초점을 맞춘다는 것을 알 수 있습니다. 두 번째 테스트에서는 이전에 열지 않은 google-chrome의 새 인스턴스를 엽니 다. (Side note : 데스크탑에 대해 마음에 들지 않으면 cairo dock이있는 Openbox입니다)
주석에서 제안에 따라 포함 된 애니메이션이 제거되고 게시 된 링크 만 있습니다. 고장난 경우 신고하십시오!
http://i.stack.imgur.com/puuPZ.gif
4 월 7 일 업데이트
나는 zenity의 드롭 다운 항목 상자에 나열된 모든 프로그램을 만들기 위해 스크립트를 다소 개선했습니다. 이제 사용자는 각 프로그램을 기억할 필요는 없지만 화살표 키를 사용하여 목록을 스크롤하거나 드롭 다운 메뉴를 열면됩니다. 또한이 개선 된 버전은 이름이 아니라 창 ID별로 창을 표시하므로 성능이 훨씬 향상됩니다. .desktop 파일을 통과하는 방식은 cut 명령을 두 번 사용하여 중복되는 것이지만 지금까지는 스크립트가 좋지 않기 때문에 이것이 내가 할 수있는 전부입니다. 개선을위한 제안은 환영합니다!
#!/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와 비슷하게 보이지만이 스크립트와 기능이 다릅니다.
이 스크립트가 마음에 든다면 수정해야 할 것이 있으면 알려주십시오. 유용하다고 생각되면 답을 올리는 것을 잊지 마십시오.