xmonad의 사용자 정의 데스크탑에서 애플리케이션 열기

xmonad의 사용자 정의 데스크탑에서 애플리케이션 열기

shell-command를 들어 내가 emacs전화한다고 가정합니다. 이 예에서는 이런 방식으로 시작된 응용 프로그램을 (shell-command "evince")자동 으로 .evince5xmonad

답변1

정신적으로뭔가를하고 잘해라,악마의 세력이런 문제를 해결하기 위해 만들어졌습니다무엇이든표준 준수WM(예를 들어 올바르게 구성된 XMonad, 또한보십시오자주 묻는 질문).

라인에 따른 일부 구성(사용이 튜토리얼, Evince를 일치시키는 이 방법이 실제로 유효한지 모르겠습니다. 어쩌면 다른 방법이 필요할 수도 있습니다(문서 참조).

(if
  (is (application_name) "Evince")
    (begin
    (set_workspace 5)
    (maximize)
  )
)

일을 해야 합니다. 데빌스 파이 참고하세요여기서 자주 언급되는, 더 유용한 정보를 한 번의 클릭으로 확인하실 수 있습니다.

답변2

순수한 xmonad 구성으로 이를 달성할 수 있습니다. 프로그램에서 .xmonad/xmonad.hs이를 위해 ManageHook을 설정해야 합니다. 의도적으로 하나 이상의 "규칙"을 포함시켰습니다.

theManageHook = composeAll [
    -- send applications to the right workspace
    className =? "Evince" --> doShift "5",
    className =? "Pidgin" --> doShift "4"
    --- more settings ...
]

main = do
    xmonad $ gnomeConfig { 
        manageHook = theManageHook <+> manageHook gnomeConfig
    }

xprop원하는 창을 클릭하면 해당 창의 클래스 이름을 볼 수 있습니다. className은 xprop 출력의 두 번째 항목을 나타냅니다. 일부 xproperties만 원할 경우 xprop이를 매개변수로 허용합니다.

~ $ xprop WM_CLASS WM_NAME
WM_CLASS(STRING) = "evince", "Evince"
WM_NAME(STRING) = "Document Viewer"

더 많은 관련 콘텐츠는 다음에서 찾을 수 있습니다.Xmonad FAQ.

답변3

xdotool이는 창의 클래스를 변경한 후 또는 Devil's Pie를 5사용하여 XMonad데스크탑으로 이동할 수 있는 방법입니다 .

#!/bin/sh
$1 &
NEW_WINDOW_PID=$!

WINDOW_EXISTENCE=$(xdotool search --pid ${NEW_WINDOW_PID} 2> /dev/null) #is empty if the window hasn't finished opening.
COUNTER=0
while [[ -z $WINDOW_EXISTENCE && $COUNTER < 6 ]] #waits for the window to open
do
    WINDOW_EXISTENCE=$(xdotool search --pid ${NEW_WINDOW_PID} 2> /dev/null)
    sleep 1
    (( COUNTER++ ))
done

if [ $COUNTER != "6" ]; then
    NEW_WINDOW_ID=$(xdotool search --onlyvisible --pid ${NEW_WINDOW_PID}) #finds the window that was just opened
    xdotool set_window --class yay ${NEW_WINDOW_ID}; #change the class of the window to yay
fi

그런 다음 emacs에 함수를 작성하십시오.

(defun window-in-desktop-5 (cmd)
  "start shell command on desktop 5"
  (interactive "sshell-command: ")
  (shell-command  (concat "/path/to/xdotoolscript " cmd)))

Emacs 함수를 통해 프로그램을 호출할 때마다 창의 PID가 이를 호출한 함수와 동일한 한 창의 클래스 이름이 변경됩니다. 그렇지 않으면 스크립트는 6초 후에 시간 초과됩니다.

관련 정보