можно конечно так:
Если Документ.Ссылка.Метаданные().Имя = "РеализацияТоваровУслуг" Тогда
....
КонецЕсли
но первый вариант красивее.
Если Документ.Ссылка.Метаданные().Имя = "РеализацияТоваровУслуг" Тогда
....
КонецЕсли
Если Документ.Ссылка.Метаданные().Имя = "РеализацияТоваровУслуг" Тогда
....
КонецЕсли
import XMonad
main = do xmonad $ defaultConfig
XConfig проще всего получить из функции defaultConfig и на основе настроек по умолчанию создать свои собственные.import XMonad
main = do
xmonad $ defaultConfig {
modMask = mod4Mask }
Config { font = "xft:DejaVu Sans Mono:size=10:bold:antialias=true",
bgColor = "#000000",
fgColor = "#BBBBBB",
position = Static { xpos = 1690 , ypos = 0, width = 230, height = 20 },
commands = [
Run Date "%a %b %_d %Y %H:%M:%S" "date" 10,
Run Kbd [("us", "US"), ("ru", "RU")]
],
template = "<fc=green>%kbd%</fc> %date%"
}
Назначение полей font, bgColor и fgColor не требует объяснений. Содержимое поля position было установлено опытным путём. Эксперименты показали, что для отображения даты и раскладки клавиатуры потребуется ровно 230 пикселов. Так как трей я хочу сделать шириной в 250 пикселов, то начальная позиция правой панели будет в точке 1690 по оси X. Высота бара будет состовлять 20 пикселов.Config { font = "xft:DejaVu Sans Mono:size=10:bold:antialias=true",
bgColor = "#000000",
fgColor = "#BBBBBB",
position = Static { xpos = 0 , ypos = 0, width = 1530, height = 20 },
commands = [ Run Cpu ["-S", "True", "-t", "CPU: <total>", "-L","5","-H","40","--normal","#FFFF00","--high","#FF0000"] 10,
Run Memory ["-S", "True", "-t","RAM: <usedratio> (<used>MiB of <total>MiB)"] 10,
Run XMonadLog
],
template = "%cpu% %memory% %XMonadLog%"
}
Здесь используются команды Cpu, Memory и XMonadLog. Команде Cpu передаётся два параметра. Первый параметр -- это набор опций для отображения. Шаблон передаётся через опцию -t (опция и её значение указываются в подряд следующих элементах списка). Доступны следующие переменные: total, bar, user, nice, system, idle, iowait, значение которых известно любому линуксойду. Опция -S в True просит xmobar показывать знак единицы измерения величины (в данном случае %). Опции -L и -H задают нижний и верхний предел для раскрашивания выводимого значения соответственно цветами в оциях --normal и --high. До значения -L цвет текста будет по умолчанию, между -L и -H цвет будет браться из опции --normal, для значений выше и равных -H будет использоваться цвет --high. Вторым параметром команде Cpu передаётся частота обновления в десятых долях секунды.trayer --edge top --align right --margin 230 --widthtype pixel --width 200 --heighttype pixel --height 20 --tint 0x0 --alpha 0 --transparent true
Думаю, что тут всё понятно и я не буду останавливаться на этой команде.xmobar ~/local/conf/xmobar_left &
xmobar ~/local/conf/xmobar_right &
trayer --edge top --align right --margin 230 --widthtype pixel --width 200 --heighttype pixel --height 20 --tint 0x0 --alpha 0 --transparent true &
exec xmonad
import XMonad
import XMonad.Hooks.ManageDocks
import XMonad.Layout.NoBorders
import XMonad.Layout.Tabbed
import XMonad.Layout.StackTile
myLayouts = ( avoidStruts $ smartBorders $
Tall 1 (3/100) (1/2) |||
StackTile 1 (3/100) (1/2) |||
simpleTabbed ) |||
noBorders Full
main = do
xmonad $ defaultConfig {
modMask = mod4Mask,
layoutHook = myLayouts }
Новый код выделен полужирным шрифтом. Итак, мы создаём 4 лейаута:import XMonad
import XMonad.Hooks.ManageDocks
import XMonad.Layout.NoBorders
import XMonad.Layout.Tabbed
import XMonad.Layout.StackTile
myLayouts = ( avoidStruts $ smartBorders $
Tall 1 (3/100) (1/2) |||
StackTile 1 (3/100) (1/2) |||
simpleTabbed ) |||
noBorders Full
main = do
xmonad $ defaultConfig {
modMask = mod4Mask,
layoutHook = myLayouts,
manageHook = manageHook defaultConfig <+> manageDocks }
Хуки, как видно, объединяются оператором <+>. Кроме управления барами, в обработчике manageHook можно управлять поведением различных окон. Все доступные операции приведены в документации здесь. Я покажу, на примере своего конфига, как делать определённые окна плавающими. myManageHook = composeAll [
className =? "Gtk-recordmydesktop" --> doFloat,
className =? "Xmessage" --> doFloat,
className =? "Gxmessage" --> doFloat,
className =? "Galculator" --> doFloat,
className =? "Gksu" --> doFloat ]
manageHook = manageHook defaultConfig <+> manageDocks <+> myManageHook
Здесь я получаю класс окна при помощи функции className и сравниваю его с образцом оператором =?. Если образец и класс совпадают, то окно передаётся функции doFload оператором -->, которая делает окно плавающим. Класс окна можно получить командой$ xprop | grep CLASS
Кроме класса окна можно использовать имя приложения или заголовок окна. Все доступные операции описаны в документации.myWorkspaces = [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ]
main = do
xmonad $ defaultConfig {
modMask = mod4Mask,
workspaces = myWorkspaces,
layoutHook = myLayouts,
manageHook = manageHook defaultConfig <+> manageDocks <+> myManageHook }
Конечно же Вы можете назвать ваши рабочие пространства как хотите. Эти имена будут отображаться в нашем xmobar.logHook = dynamicLogString defaultPP >>= xmonadPropLog
И это будет работать. Но вывод, предоставленный функцией defaultPP отображается одним цветом и немного неудобно (для меня) отформатирован. Функция dynamicLogString принимает экземпляр типа PP (pretty-printing) и отдаёт строку, отформатированную согласно этому параметру. Создать экземпляр PP лучше всего функцией xmobarPP. myLog = dynamicLogString xmobarPP {
ppCurrent = xmobarColor "green" "" . wrap "[" "]",
ppTitle = xmobarColor "lightblue" "" . wrap "[" "]",
ppHidden = xmobarColor "yellow" "",
ppHiddenNoWindows = xmobarColor "darkgray" "",
ppLayout = xmobarColor "orange" "" }
logHook = myLog >>= xmonadPropLog,
Для работы этого кода необходимо подключить модуль XMonad.Hooks.DynamicLog.<workspace`ы> : <имя лейаута> : <заголовок текущего окна>
Разделителем по умолчанию между воркспейсами служит пробел, а между воркспейсами, именем лейаута и именем окна -- двоеточие, окружённое пробелами. Разделители меня устраивают. В структуре PP мы меняем следующие параметры:main = do
xmonad $ defaultConfig {
modMask = mod4Mask,
borderWidth = 3,
normalBorderColor = "gray",
focusedBorderColor = "red",
workspaces = myWorkspaces,
layoutHook = myLayouts,
logHook = myLog >>= xmonadPropLog,
manageHook = manageHook defaultConfig <+> manageDocks <+> myManageHook }
myKeys x = M.union (keys defaultConfig x) (keysToAdd x)
where
keysToAdd = c -> mkKeymap c $ [
("<XF86HomePage>", spawn "x-www-browser"),
("<XF86AudioRaiseVolume>", spawn "~/local/bin/pactrl.sh inc"),
("<XF86AudioLowerVolume>", spawn "~/local/bin/pactrl.sh dec"),
("<XF86AudioMute>", spawn "~/local/bin/pactrl.sh mute"),
("<XF86AudioPlay>", spawn "xterm -e cmus"),
("<XF86Mail>", spawn "icedove"),
("<XF86Search>", spawn "pcmanfm"),
("<XF86Calculator>", spawn "galculator"),
("<XF86Launch5>", spawn "emacs"),
("<XF86Launch6>", spawn "gthumb"),
("<XF86Favorites>", spawn "gksu halt"),
("M-<XF86Favorites>", spawn "gksu reboot"),
("<Print>", spawn "~/local/bin/printscreen.sh"),
("M1-<Tab>", windows W.focusDown),
("M1-<F4>", kill) ]
main = do
xmonad $ defaultConfig {
modMask = mod4Mask,
borderWidth = 3,
normalBorderColor = "gray",
focusedBorderColor = "red",
workspaces = myWorkspaces,
layoutHook = myLayouts,
logHook = myLog >>= xmonadPropLog,
manageHook = manageHook defaultConfig <+> manageDocks <+> myManageHook,
keys = myKeys }
Для работы кода требуется импортировать следующие модули: import XMonad.Util.EZConfig
import XMonad.Operations
import qualified XMonad.StackSet as W
import qualified Data.Map as M
Привязки клавиш представляют собой карту кортежей из модификатора, клавиши и обработчика. Существует несколько способов создать такую карту, но я предпочитаю использовать функцию mkKeymap. Функция mkKeymap принимает список кортежей состоящий из строкового обозначения клавиатурного сочетания в стиле emacs и обработчика. Получить имена клавиш можно с помощью программы xev или подглядеть их в минибуфере emacs.import XMonad
import XMonad.Hooks.ManageDocks
import XMonad.Layout.NoBorders
import XMonad.Layout.Tabbed
import XMonad.Layout.StackTile
import XMonad.Hooks.DynamicLog
import XMonad.Util.EZConfig
import XMonad.Operations
import qualified XMonad.StackSet as W
import qualified Data.Map as M
myWorkspaces = [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ]
myLayouts = ( avoidStruts $ smartBorders $
Tall 1 (3/100) (1/2) |||
StackTile 1 (3/100) (1/2) |||
simpleTabbed ) |||
noBorders Full
myManageHook = composeAll [
className =? "Gtk-recordmydesktop" --> doFloat,
className =? "Xmessage" --> doFloat,
className =? "Gxmessage" --> doFloat,
className =? "Galculator" --> doFloat,
className =? "Gksu" --> doFloat ]
myLog = dynamicLogString xmobarPP {
ppCurrent = xmobarColor "green" "" . wrap "[" "]",
ppTitle = xmobarColor "lightblue" "" . wrap "[" "]",
ppHidden = xmobarColor "yellow" "",
ppHiddenNoWindows = xmobarColor "darkgray" "",
ppLayout = xmobarColor "orange" "" }
myKeys x = M.union (keys defaultConfig x) (keysToAdd x)
where
keysToAdd = c -> mkKeymap c $ [
("<XF86HomePage>", spawn "x-www-browser"),
("<XF86AudioRaiseVolume>", spawn "~/local/bin/pactrl.sh inc"),
("<XF86AudioLowerVolume>", spawn "~/local/bin/pactrl.sh dec"),
("<XF86AudioMute>", spawn "~/local/bin/pactrl.sh mute"),
("<XF86AudioPlay>", spawn "xterm -e cmus"),
("<XF86Mail>", spawn "icedove"),
("<XF86Search>", spawn "pcmanfm"),
("<XF86Calculator>", spawn "galculator"),
("<XF86Launch5>", spawn "emacs"),
("<XF86Launch6>", spawn "gthumb"),
("<XF86Favorites>", spawn "gksu halt"),
("M-<XF86Favorites>", spawn "gksu reboot"),
("<Print>", spawn "~/local/bin/printscreen.sh"),
("M1-<Tab>", windows W.focusDown),
("M1-<F4>", kill) ]
main = do
xmonad $ defaultConfig {
modMask = mod4Mask,
terminal = "xterm",
borderWidth = 3,
normalBorderColor = "gray",
focusedBorderColor = "red",
workspaces = myWorkspaces,
layoutHook = myLayouts,
logHook = myLog >>= xmonadPropLog,
manageHook = manageHook defaultConfig <+> manageDocks <+> myManageHook,
keys = myKeys }
#!/bin/bash
VOLUME_FILE=/tmp/pa_volume
MUTE_FILE=/tmp/pa_mute
function doMute() {
if [ -f $MUTE_FILE ];
then
pactl set-sink-mute 0 0
rm -rf $MUTE_FILE
else
pactl set-sink-mute 0 1
touch $MUTE_FILE
fi
}
function doChangeVolume() {
if [ ! -f $VOLUME_FILE ];
then
echo 100 > $VOLUME_FILE
fi
VOLUME=`cat $VOLUME_FILE`
NEW_VOLUME=$((VOLUME+$1))
if [ $NEW_VOLUME -lt 0 ];
then
exit 0
fi
pactl set-sink-volume 0 $NEW_VOLUME%
echo $NEW_VOLUME > $VOLUME_FILE
}
case $1 in
inc)
doChangeVolume 2
;;
dec)
doChangeVolume -2
;;
mute)
doMute
;;
esac
exit 0
Скрипт использует утилиту pactl для изменения громкости. Можно было бы использовать её напрямую в xmonad.hs, но xwd -root | convert - <filename>
Скрипт нужен лишь для того, чтобы определить имя файла и показать его имя в диалоге с предложением открыть в просмоторщике. #!/bin/bash
FILEPATH=~/
FILENAME=snapshot
FILEEXT=.png
FULLFILENAME=$FILEPATH$FILENAME$FILEEXT
if [ -f /usr/bin/gxmessage ];
then
XMESSAGE=gxmessage
else
XMESSAGE=xmessage
fi
for((I=1; ;I++)); do
if [ ! -f $FULLFILENAME ]; then
break
fi
FULLFILENAME=$FILEPATH$FILENAME$I$FILEEXT
done
xwd -root | convert - $FULLFILENAME
$XMESSAGE "Snapshot has been saved to $FULLFILENAME" -center -default Ok -buttons Ok:0,Open:1
if [ $? -eq 1 ];
then
gthumb $FULLFILENAME
fi
$ feh --bg-scale <имя файла>
А второй -- восстановление изображения после перезапуска X`ов. Для этого нужно поместить такую команду в файл ~/.xsession eval $(cat ~/.fehbg)