i3의 부동 창에서 프로그램 열기

i3의 부동 창에서 프로그램 열기

부동 창에서 프로그램을 열고 싶습니다. 나는 그것을 시도했지만 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

관련 정보