창으로 "이동"(포커스 + 상승) 하고 비상 플래그를 비상처럼 보이도록 설정하는 키보드 단축키를 원합니다. 현재 데스크탑이 아닌 데스크탑에 있더라도 작업 표시줄(Gnome + Metacity)에 나타납니다. 그리고 깜박이기 시작했습니다(지적해 주신 @slm에게 감사드립니다).
해당 창은 현재 가상 데스크톱이 아닌 다른 가상 데스크톱에 있을 수 있습니다.
이 특별한 경우 Skype 창에는 비상 플래그가 설정되어 alt-tab
팝업(메타시티 WM)에 표시되지만 현재 가상 데스크톱에 없으면 해당 창으로 전환할 수 없습니다.
조사 xdotool
하고 wmctrl
감독하고 있는데 운이 없군요.
어떤 아이디어나 단서가 있나요?
고쳐 쓰다:_NET_WM_STATE
= _NET_WM_STATE_DEMANDS_ATTENTION
... 을 말하는 것 같습니다 .
답변1
내 생각엔 좀 찾은 것 같아피복재해결책여기.
제공된 Bash 스크립트는 내가 찾고 있는 것이며 분명히 이점을 제공합니다 wmctrl
!
빠른 액세스/보관 목적으로 두 스크립트를 여기에 복사하여 붙여넣었습니다.
주의가 필요한 창으로 이동:
#!/bin/bash
activeWinIdLine=`xprop -root | grep _NET_ACTIVE_WINDOW\(WINDOW\) `
activeWinId="${activeWinIdLine:40}"
echo $activeWinId > ~/activeWinId
for id in `wmctrl -l | cut -d " " -f 1`; do
xprop -id $id | grep "_NET_WM_STATE_DEMANDS_ATTENTION" 2>&1 > /dev/null
if [ "$?" = "0" ]; then
wmctrl -i -a $id
exit 0
fi
done
exit 1
현재 사용 중인 창으로 돌아가기:
#!/bin/bash
if [ -f ~/activeWinId ]; then
origWinId=`cat ~/activeWinId`
wmctrl -i -a $origWinId
fi
토론해 주셔서 감사합니다. 특히 저에게 올바른 방향을 알려준 @slm에 감사드립니다.
답변2
작은 C 프로젝트를 가지고세투르겐트(Hilljoy에게 감사드립니다). 용법:
seturgent <winid> [0|1] # 0: urgent off, 1: urgent on
소스 복사seturgent.c:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
static void die(const char *s) {
fputs(s, stderr);
exit(EXIT_FAILURE);
}
static void seturgency(Display *dpy, Window winid, Bool set) {
XWMHints *hints = XGetWMHints(dpy, winid);
if(!hints) {
fputs("seturgent: unable to get window manager hints.\n", stderr);
return;
}
if(set)
hints->flags |= XUrgencyHint;
else
hints->flags &= ~XUrgencyHint;
if(!XSetWMHints(dpy, winid, hints))
fputs("seturgent: unable to set urgency hint.\n", stderr);
XFree(hints);
}
int main(int argc, char **argv) {
Display *dpy;
if(argc < 2 || !strcmp(argv[1], "-h")) /* help / usage */
die("Usage: seturgent <winid> [0|1]\n");
if(argc == 2 && !strcmp(argv[1], "-v")) /* version */
die("seturgent-"VERSION" © 2010-2012 seturgent engineer, see " \
"LICENSE file for details.\n");
if(!(dpy = XOpenDisplay(NULL)))
die("seturgent: unable to open display.\n");
/* set the urgency hint (or not), if not specified its True. */
seturgency(dpy, (Window)strtol(argv[1], NULL, 0),
!((argc > 2) && !atol(argv[2])));
XSync(dpy, False);
XCloseDisplay(dpy);
return EXIT_SUCCESS;
}