Intereting Posts
приятный и ионизирующий: какой должен быть первый? Как изменить заголовок активного окна с помощью wmctrl Как сделать netstat, который будет фильтровать только на основе pid Пакет mv cronjob оставляет некоторые (не все) копии в источнике Есть ли способ попросить udisksctl перечислить все разделы и блокировать устройства? install failing для libpcap: рецепт для целевого pcap-linux.o не удалось Частично дублированная история при настройке PS1 в .bash_profile Связывание / proc / mnt в / proc / mounts Не удается установить машину Debian 8 для исправления времени? Спящий терминал SSH вместо основного терминала Ошибка при поиске несуществующей строки с EDITOR = vi crontab -e Как включить USB с помощью linux-socfpga? Список * все * IP-маршруты к месту назначения в таблице маршрутизации Linux Не удается войти в систему на удаленном сервере с помощью проверки подлинности с открытым ключом GNU / Linux: «устройство: преобразователь устройств: создать ioctl failed» «устройство или занятый ресурс»

Откройте приложение на обычном рабочем столе в xmonad

Предположим, что я вызываю shell-command из emacs например (shell-command "evince") . Возможно ли переместить приложение (в данном примере evince ) автоматически запускается таким образом на рабочий стол 5 в xmonad .

В духе сделать что-то одно и сделать это хорошо , пирог Дьявола был создан для этих проблем с любыми совместимыми со стандартами WM ( такими как правильно настроенный XMonad , также см. FAQ ).

Некоторая конфигурация вдоль линий (принятая из этого учебника , я не знаю, работает ли этот способ соответствия Evince, возможно, какой-то другой способ (см. Документы) необходим)

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

должен выполнять эту работу. Обратите внимание, что здесь часто упоминается пирог Дьявола, может быть более полезная информация всего за один клик.

Для этого возможна чистая конфигурация 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-output. Если вам нужны только xproperties, xprop принимает их как аргументы:

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

Подробнее об этом можно узнать в FAQ Xmonad .

Ниже приведен пример использования xdotool для изменения класса окна, после чего вы можете переместить его на Рабочий стол 5 с помощью XMonad или Devil's pie.

 #!/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 окна будет таким же, как функция, которая его вызвала, иначе скрипт истечет через шесть секунд.