たとえば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を設定する必要があります。意図的に1つ以上の「ルール」を含めました。
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 出力の 2 番目の項目を表します。一部の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秒後にタイムアウトします。