Abra o aplicativo na área de trabalho personalizada no xmonad

2

Suponha que eu chame shell-command de emacs , por exemplo (shell-command "evince") . É possível mover o aplicativo (no exemplo atual evince ) iniciado dessa maneira automaticamente para a área de trabalho 5 in xmonad .

    
por student 08.09.2012 / 15:37

3 respostas

1

No espírito de fazer uma coisa e fazê-lo bem , a Torta do diabo foi criada para esses tipos de problemas com qualquer compatível com os padrões WM ( como o XMonad configurado corretamente , veja também o FAQ ).

Alguma configuração ao longo das linhas (adotada de este tutorial , eu não sei se esta maneira de combinar Evince realmente funciona, talvez de outra forma (veja os docs) é necessário) de

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

deve fazer o trabalho. Note que a torta de Devil foi mencionada com bastante frequência por aqui , pode haver informações mais úteis a apenas um clique de distância .

    
por 12.09.2012 / 09:56
1

Uma configuração xmonad pura é possível para isso. No seu .xmonad/xmonad.hs você precisa configurar um manageHook para isso. Eu incluí mais de uma "regra" de propósito.

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
    }

Você pode ver o className de uma determinada janela com xprop e clicar na janela desejada. className refere-se à segunda entrada no xprop-output. Se você quiser apenas algumas xproperties, xprop as aceita como argumentos:

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

Mais informações sobre isso podem ser encontradas na FAQ da Xmonad .

    
por 18.10.2012 / 21:01
1

Aqui está uma abordagem usando xdotool para alterar a classe da janela e, em seguida, você pode movê-la para a área de trabalho 5 com XMonad ou a torta de Devil.

#!/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

E, em seguida, escreva uma função no emacs

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

Sempre que você chamar um programa através da função emacs, ele alterará o nome da classe, contanto que o PID da janela seja o mesmo da função que o chamou. Caso contrário, o script expirará após seis segundos.

    
por 19.10.2012 / 21:29