부동 창에서 프로그램을 열고 싶습니다. 나는 그것을 시도했지만
exec emacsclient -c ; floating enable
새 창 대신 이전에 활성화된 창을 부동하게 만듭니다.
답변1
이것이 내가 Galculator 애플리케이션에 대해 수행한 작업입니다.
~/.config/i3/config
for_window [class="Galculator" instance="galculator"] floating enable
class="..." 및 instance="..." 에 무엇이 있는지 알아 보려면 다음을 입력하십시오.xprop터미널에서 띄우고 싶은 창을 클릭하세요. 이 정보는 WM_CLASS(STRING)="instance", "Class" 아래 하단에서 찾을 수 있습니다.
답변2
i3에서 현재 초점이 맞춰진 창을 부동으로 만드는 올바른 방법은 다음을 실행하는 것입니다.
i3-msg floating enable
이것이 구성 라인이 수행하는 작업입니다.
이제 문제는 i3-msg
창이 포커스를 받기 전에 실행되고 있습니다(포커스가 있는 경우에도). 피터 O. 설명여기 있어요창의 PID를 기반으로 포커스를 얻는 방법. 우리는 이것을 다음과 같이 사용할 수 있습니다:
our_application &
pid="$!"
# Wait for the window to open and grab its window ID
winid=''
while : ; do
winid="`wmctrl -lp | awk -vpid=$pid '$3==pid {print $1; exit}'`"
[[ -z "${winid}" ]] || break
done
# Focus the window we found
wmctrl -ia "${winid}"
# Make it float
i3-msg floating enable > /dev/null;
# Move it to the center for good measure
i3-msg move position center > /dev/null;
# Wait for the application to quit
wait "${pid}";
알아채다:
- 적용되는 경우하다초점을 잡는 것 자체만으로, 이것이 일어나기를 기다리는 것만으로도 충분합니다. 바라보다여기현재 초점이 맞춰진 창을 확인하는 방법을 알아보세요.
- 아직 완료하지 않았지만 스크립트를 확장하여 변경하기 전의 위치로 포커스를 되돌릴 수 있어야 합니다.
wmctrl
모든 창의 PID를 알아내는 것이 항상 가능한 것은 아닙니다.display
예를 들어 ImageMagick의 목록에는 항상 PID 0이 포함됩니다. 바라보다여기창 제목을 수정하는 방법.위 솔루션의 중요한 부분을 스크립트로 감싸면 다음과 같은 내용을 작성할 수 있습니다.
exec our_command; grab_focus; floating enable
i3 구성에서.
답변3
요약하고 싶다허블 망원경 이후다른 더러운 해결 방법에 대한 정보가 추가되었습니다 .
총 길이 DR: && i3-msg "[id=$(xdotool getactivewindow)] floating enable"
바로가기 정의에 추가합니다(필수 xdotool
). 예를 들어bindsym $mod+button exec program && i3-msg "[id=$(xdotool getactivewindow)] floating enable"
규칙을 설정할 수 있습니다.모두i3-config 또는 이에 상응하는 설정에서 설정할 수 있는 조건 목록과 일치하는 창입니다 i3-msg
.
구문은 입니다 for_window [ criteria ] command
.여기. 단일 창에서만 작동하도록 하려면 기준의 고유성을 보장할 수 있습니다.
가지고 있는 것뿐만 아니라
수업
창 클래스를 비교합니다(WM_CLASS의 두 번째 부분). 특별한 값을 사용하세요집중된현재 초점이 맞춰진 창과 동일한 창 클래스를 가진 모든 창과 일치합니다.
예
창 인스턴스를 비교합니다(WM_CLASS의 첫 번째 부분). 특별한 값을 사용하세요집중된현재 초점이 맞춰진 창과 동일한 창 인스턴스를 가진 모든 창과 일치합니다.
title
그러나 다음 과 같은 것이 더 있습니다 id
.
제목
X11 창 제목을 비교합니다(대체로 _NET_WM_NAME 또는 WM_NAME). 현재 초점이 맞춰진 창과 동일한 창 제목을 가진 모든 창을 일치시키려면 특수 값 __focused__를 사용하십시오.
ID
예를 들어 xwininfo를 통해 얻을 수 있는 X11 창 ID를 비교하세요.
emacsclient
명령줄 프로그램이라고 가정하면 다음을 추가할 수 있습니다.
for_window [ title="uniquetitle" ] floating enable
i3 구성으로 이동하여 다음을 사용하여 즐겨 사용하는 터미널을 엽니다.
termite -e emacsclient -t uniquetitle
부동 모드에서 직접 엽니다.
명령줄 프로그램이 아니고 헤더 옵션이 없는 경우 다른 기준을 사용하거나 예를 들어 ( xdotool
및 사용 i3-msg
):
bindsym $mod+button exec program && xdotool getactivewindow set_window --name uniquetitle
아니면 너무 더럽지 않은지
bindsym $mod+t exec program && i3-msg "[id=$(xdotool getactivewindow)] floating enable"
답변4
termnml의 답변을 약간 조정하면 나에게 효과적이었습니다. 이제 전체 작업 결과는 다음과 같습니다.
bindsym $mod+Shift+Return exec --no-startup-id urxvt --class floating
for_window [class="floating"] floating enabled