응용 프로그램 작업을 더 쉽게 만들기 위해 사용하려는 스크립트가 있습니다. 이제 애플리케이션 이름(첫 번째 매개변수)의 창 ID를 가져와서 window_id
존재하는지 확인합니다. 존재하지 않는 경우 명령을 실행하여 애플리케이션을 엽니다(두 번째 매개변수). 존재하는 경우 wmctrl
창을 가져와 window_id
앞으로 이동하는 데 사용됩니다 .
내 계획은 내가 정기적으로 사용하는 모든 응용 프로그램의 바로 가기에 이 스크립트를 추가하는 것입니다. 그러나 마지막으로 열려 있는 창만 열 수 있는 것이 아니라 응용 프로그램이 열려 있는 모든 창을 순환하는 기능을 추가하고 싶습니다. Bash에서 이 작업을 수행하는 방법에 대한 제안이 있습니까? 전역 시스템 변수를 설정해야 합니까? 분명하지만 나는 bash를 처음 접했습니다. 이것은 windowctl의 스크립트입니다. 제가 확장하고 싶은 것은 get_window_id
.
#!/bin/bash
#command [app_name] [app_command]
function get_window_id() {
#this is the part I want to extend
window_id=$(wmctrl -l | grep -i "$1" | tail -1 | cut -f1 -d" ")
}
function open_app() {
exec $2
}
get_window_id $1
if [ -z $window_id ]
then
open_app $1 $2
else
wmctrl -i -a "$window_id"
fi
예를 들어 + windowctl sublime subl3
에 명령을 추가하는 것입니다 .AltS
답변1
lonew
나는 오랫동안 이것의 이름을 딴 미니 스크립트를 사용해 왔습니다 . 의 약자입니다 "lastof or new"
. lastof
최근에 액세스한 특정 명령과 일치하는 표시되는 창을 찾으려고 시도하는 또 다른 스크립트입니다.
두 스크립트는 다음과 같습니다.
(아마도 일부 리팩토링을 사용할 수 있지만 작업이 완료됩니다)
로니우:
#!/bin/bash
CMD="$1"; shift; ARGS="$@"
lastof $CMD || { echo $CMD $ARGS; $CMD $ARGS & }
disown
마침내:
#!/usr/bin/env ruby
#open-last
#List all windows and sort them by the time they were last accessed
require 'shellwords'
XTIME="_NET_WM_USER_TIME"
QARGV=ARGV.map {|arg| Shellwords.escape(arg)}
ids=IO.popen "xdotool search --onlyvisible #{QARGV.join(" ")}"
max_time_id=nil
max_time=nil
ids.each_line do |id|
id.chomp!
puts "id=#{id}"
time=`xprop -id #{id} #{XTIME}`.split('=')[1].to_i
max_time||=time
max_time_id||=id
if time > max_time
max_time=time
max_time_id=id
end
end
exit(1) unless max_time_id
puts "Switching to ID: #{max_time_id}"
exit system("xdotool windowactivate #{max_time_id}")
__END__
답변2
어쩌면 이것이 바로 당신이 찾고 있는 것일 수도 있습니다. 방금 그것을 사용했지만 sleep
또는 같은 대화 상자를 사용하고 루프를 변경하여 반복을 유지하거나 필요한 모든 것을 변경할 수 있습니다. 그런 다음 필요한 경우 단축키를 추가할 수 있습니다. yad
zenity
이를 위해서는 애플리케이션의 실행 명령과 애플리케이션의 창 제목 정규식(특정 애플리케이션의 각 창마다 다를 수 있음)을 사용하여 스크립트를 실행해야 합니다.
shortname=$1
case $shortname in
(firefox) cmd='firefox'; rx='Mozilla Firefox$';;
(nautilus) cmd='nautilus'; rx=' (-|—) File Browser';;
(*) echo 'unknown shortname'; exit;;
esac
id=( $(wmctrl -l | awk "/$rx/"'{print $1}') )
(( !${#id[@]} )) && { "$cmd" & exit; }
for (( i=0; i<${#id[@]}; i++ )) ;do
wmctrl -i -a ${id[i]}
sleep 3
done
wmctrl
특정 기능을 활성화(상호작용)할 수 없다는 점 참고하세요.상표응용 프로그램의 X 창 내.