예 shell-command
를 들어 내가 emacs
전화한다고 가정합니다. 이 예에서는 이런 방식으로 시작된 응용 프로그램을 (shell-command "evince")
자동 으로 .evince
5
xmonad
답변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초 후에 시간 초과됩니다.