Xmonad, xmobar. Делимся полезными наработками.

Автор ChubaDuba, 23 января 2018, 15:02:35

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

ChubaDuba

#15
132-я какая из них?
Глаз коробит LogHook. Почему не в одну строчку:

, logHook = myLogHook wsbar >> updatePointer (0.5,0.5) (0,0)

Ogis1975

#16
Цитата: ChubaDuba от 14 февраля 2018, 17:42:14132-я какая из них?
Это }
Цитата: ChubaDuba от 14 февраля 2018, 17:42:14Глаз коробит LogHook. Почему не в одну строчку:
Сейчас попробую в одну строчку и отпишусь.

Cообщение объединено 14 февраля 2018, 18:42:46

Попробовал. Тоже самое. Ничего не изменилось. :-[

Ogis1975

#17
Модуль, выводящий список открытых окон, программ и т.п. Используется маленькая утилита-dmenu. То есть, модуль выдает список с именами окон, если вы забыли, где вы оставили свой XChat :P Подойдет для тех, кто не использует xmobar или dzen2
Установка. Подключаем модуль
import XMonad.Actions.WindowBringer
Назначим горячие клавиши.
, ((modm .|. shiftMask, xK_g     ), gotoMenu)
, ((modm .|. shiftMask, xK_b     ), bringMenu)


Выглядит вот так



Cообщение объединено 19 марта 2018, 18:54:37

Компоновка окон XMonad.Layout.BinarySpacePartition
Компоновка окон, как в тайловом оконном менеджере bspwm.
Установка и настройка.
Подключаем модуль
import XMonad.Layout.BinarySpacePartition
Добавим компоновку. У меня вот так

myLayouts = toggleLayouts (noBorders Full) others
  where
    others = spacing 10 $ ResizableTall 1 (1.5/100) (3/5) [] ||| emptyBSP


Выглядит вот так


ChubaDuba

#18
Цитата: Ogis1975 от 19 марта 2018, 18:37:02Модуль...XMonad.Actions.WindowBringer

От себя добавлю, что есть ещё XMonad.Actions.GridSelect.
Дописываем в конфиг:

...
import XMonad.Actions.GridSelect
...
myKeys = [
         ...
         , ((mod4Mask,        xK_g), goToSelected defaultGSConfig)
         ...
         ]
...


Выглядит это всё хозяйство вот так:


Кстати, может кто-нибудь менял цвета и может выложить готовое решения. У самого пока дело до этого не дошло.

Cообщение объединено 20 марта 2018, 18:51:50

Погода в xmobar.

Стандартный плагин

Чтобы отобразить в xmobar информацию о погоде, используя его стандартный плагин, необходимо добавить в файл .xmobarrc следующее:

...
commands = [
         ...
         Run Weather "XXXX" ["-t","<tempC>°C"] 36000,
         ...
         ]
...
, template = " %StdinReader% }{ ... %weather% ... }


где XXXX - код метеостанции вашего города, согласно спецификации National Oceanic and Atmospheric Administration (NOAA). Найти код своего города можно в этом документе. Нужно сказать, что код вы найдёте при одном условии: в городе, в котором вы живёте должен быть аэропорт.

Аргументы, которые можно использовать: station, stationState, year, month, day, hour, windCardinal, windAzimuth, windMph, windKnots, windMs, windKmh visibility,skyCondition, tempC, tempF, dewPointC, dewPointF, rh, pressure.

Bash скрипт для вывода погоды в xmobar

Я живу в Ростове-на-Дону. В конце 2017 года у нас запустили в эксплуатацию новый аэропорт Платов. Код метеостанции для него я не нашёл, а информация по коду метеостанции старого аэропорта не обновляется с прошлого года. Если посмотреть http://tgftp.nws.noaa.gov/data/observations/metar/decoded/URRR.TXT (URRR - это код метеостанции старого аэропорта в Ростове), то увидим, что информация менялась последний раз 31.12.2017г.:
Цитировать
Rostov-Na-Donu, Russia (URRR) 47-16N 039-49E 75M Dec 31, 2017 - 06:30 PM EST / 2017.12.31 2330 UTC Wind: from the S (180 degrees) at 7 MPH (6 KT):0 Visibility: less than 1 mile:0 Sky conditions: obscured Weather: light drizzle; fog; Cumulonimbus clouds observed Temperature: 42 F (6 C) Dew Point: 42 F (6 C) Relative Humidity: 100% Pressure (altimeter): 29.88 in. Hg (1012 hPa) ob: URRR 312330Z 18003MPS 0100 R04/0450N -DZ FG VV001 06/06 Q1012 R22/290056 TEMPO 0300 -SHRA FG BKN001 BKN020CB RMK QBB040 MAST OBSC QFE752/1003 cycle: 23

Вообще, я не расстроился по этому поводу. Наблюдать в своём xmobar текущее значение температуры? Зачем? У меня есть градусник на кухне за окном, который показывает точную температуру. Зато этот повод послужил толчком к написанию скрипта, который отображал бы необходимую мне информацию о погоде.

Сразу скажу, что я не сторонник погодных плагинов с прогнозом на несколько дней, с кучей иконок и ненужной мне информацией типа время восхода или захода солнца. От прогноза на завтрашний день мне нужно всего два значения: дневная температура и вероятность осадков.

Парсить я решил RSS ленту с сайта Гидрометцентра России. Для начала найдём саму ленту:







Теперь лента у нас есть. Как видно, в ней присутствует прогноз на три дня. Мне же нужен только завтрашний день. Пишем скрипт, который будет выдавать нам прогноз только на завтрашний день. Обзавём скрипт weather:


#!/bin/bash

s1="OK"
COLOR="#709180"

CITY_URL="http://old.meteoinfo.ru/rss/forecasts/34630"

SITE="`curl -Is $CITY_URL | head -1 | grep -Eo '.{3}$'`"

if [[ $SITE == *"$s1"* ]]; then

     TOMORROW_TEMP="`wget -O - $CITY_URL 2>/dev/null | \
              grep -w 'Температура' | sed '2!d' | \
              sed -r 's/^[^Т]+//' | sed -r 's/^[^д]+//' | \
              sed -r 's/°.+//' | sed 's/днём //'`"

     POSSIBILITY_RAIN="`wget -O - $CITY_URL 2>/dev/null | \
              grep -w 'Вероятность' | sed '2!d' | \
              sed -r 's/^[^ф]+//' | sed -r 's/^[^к]+//' | \
              sed 's/ков //' | grep -o '^[^<]*'`"
             
     
     echo "<fc=$COLOR>$TOMORROW_TEMP°C($POSSIBILITY_RAIN)</fc>"
     
else

     echo "n/a"
fi


Результатом работы скрипта будет строчка:

4°C(71%)

где
4°C - значение температуры;
(71%) - вероятность осадков.

Остаётся добавить вывод скрипта в xmobar. Добавляем в наш .xmobarrc следующие:


...
commands = [
         ...
         Run Com "/путь_до_нашего_скрипта/weather" [] "weather" 3600,
         ...
         ]
...
, template = " %StdinReader% }{ ... %weather% ... }


Цитировать
Отмечу один момент. Обновление выбранного мною сайта происходит один раз в день около 11:30 по Московскому времени. Поэтому, до обновления в xmobar мы видим текущие показания, а после обновления уже прогноз на завтрашний день.

Ogis1975

Компоновка окон CenteredMaster
Этот модуль добавляет новую компоновку окон- CenterMaster. CenterMaster размещает главное окно в центре экрана, поверх других. Все остальные окна в фоновом режиме управляются базовой компоновкой.
Установка и настройка.
Добавляем модуль
import XMonad.Layout.CenteredMaster
Затем добавляем в наш layoutHook:
myLayoutHook = centerMaster Grid ||| ...
У меня настроенно вот так
ResizableTall 1 (1.5/100) (3/5) [] ||| Grid ||| centerMaster Grid ||| emptyBSP

Выглядит вот так


Ogis1975

#20
Еще одна компоновка окон-XMonad.Layout.OneBig. Данный лайаут помещает одно (главное окно) в верхний левый угол экрана и другие (подчиненные) окна наверху. Положение окон можно отрегулировать как вам удобно. Приступим.
Подключаем модуль:
import XMonad.Layout.OneBig
Настраиваем:
myLayoutHook = OneBig (3/4) (3/4) ||| ...
У меня вот так:
myLayouts = toggleLayouts (noBorders Full) others
  where
    others = ResizableTall 1 (1.5/100) (3/5) [] ||| OneBig (3/4) (3/4) ||| emptyBSP


Выглядит вот так:



Cообщение объединено 23 марта 2018, 18:25:14

Подборка скриптов, позволяющих комфортно работать с Xmonad (и не только).
Простой "файловый менеджер". С помощью маленькой утилиты-dmenu, и этого bash скрипта, можно просматривать содержимое "Home", открывать файлы и т.п.
Скрипт:
Открыть содержимое (спойлер)
#!/bin/bash

file=1
while [ "$file" ]; do
   file=$(ls -1 --group-directories-first | /usr/bin/dmenu -l 10 -p "Blader: $(basename $(pwd))")
   if [ -e "$file" ]; then
      owd=$(pwd)
      if [ -d "$file" ]; then
         cd "$file"
      else [ -f "$file" ]
         if which xdg-open &> /dev/null; then
            exec xdg-open "$owd/$file" &
            unset file
         fi
      fi
   fi
done
[свернуть]
Теперь нужно "повесить" скриптик на сочетание клавиш. У меня вот так:
("C-<Tab>", spawn "/home/mindaugas/.scripts/dmenu_fm")
Выглядит вот так:


Модифицированный dmenu.
Маленький скрипт, позволяющий видеть историю команд. Очень удобно. каждый раз не нужно вводить названия постоянно используемых программ. Не забудьте скриптик "повесить' на сочетание клавиш, указав путь к скрипту.
У меня вот так:
("M-p", spawn "/home/mindaugas/.scripts/emenu_run")
Также, можно настроить шрифт и цвета. Ну, там все понятно.

Открыть содержимое (спойлер)
#!/bin/sh
# https://faq.i3wm.org/question/6299/repeat-or-history-for-dmenu-commands.1.html


cachedir=${XDG_CACHE_HOME:-"$HOME/.cache"}
histsize=50
if [ -d "$cachedir" ]; then
    cache=$cachedir/emenu
    hist=$cachedir/emenu_hist
else
    cache=$HOME/.emenu_cache # if no xdg dir, fall back to dotfile in ~
    hist=$HOME/.emenu_cache_hist # if no xdg dir, fall back to dotfile in ~
fi
if [ ! -e "$hist" ]; then
    touch "$hist"
    echo foo
fi
cmd=$(
    IFS=:
    if stest -dqr -n "$cache" $PATH; then
        (tac "$hist" ; stest -flx $PATH | sort -u | tee "$cache" ) | dmenu "$@" -b -f -nb '#212121' -nf '#C0C5CE' -sb '#6699CC' -sf '#212121' -fn Menlo
    else
        (tac "$hist"; cat "$cache") | dmenu "$@" -b -f -nb '#212121' -nf '#C0C5CE' -sb '#6699CC' -sf '#212121' -fn Menlo
    fi
    )

echo "$cmd" | ${SHELL:-"/bin/sh"} &
#i3-msg "exec $cmd"

sed -i -e "/^${cmd}$/d;${histsize}q" "$hist"
echo "$cmd" >> "$hist"
[свернуть]

Выглядит вот так:


Управление музыкальным проигрывателем mpd (music player daemon) средствами dmenu. Скрипт интересен тем, что можно управлять демоном сочетанием клавиш.
Порядок управления.
Я настроил клавиши так, как мне удобно. Вы можете настроить любое сочетание.
Mod4+x. Открывается dmenu, которое показывает текущее состояние демона. При нажатии клавиши "Esc", начинается воспроизведение музыки. Можно выбрать номер трека, воспроизвести, перепрыгнуть на другой трек вперед (клавиша ">") и назад (клавиша "<"), остановить воспроизведение (клавиша "|") и парочка других удобных функций. Также, скрипт запоминает последнее воспроизведение песни.
Скрипт:

Открыть содержимое (спойлер)
#!/bin/bash

# Connection Details for the MPD server
IP="127.0.0.1"
PORT="6600"

# Check if MPD is runningi
nc -w 1 -z $IP $PORT || { notify-send "MPD:" "No connection to ${IP}:$PORT" && exit $?; }

MPC=$(mpc -h $IP -p $PORT)
MPC_PLAYLIST="$(mpc -h $IP -p $PORT playlist |nl -s ' - ')"

# Check the state of MPD
if [[ $MPC == *\[playing\]* ]]; then
   read -r MPC_TITLE <<<"$MPC"
   MPC_POSITION=${MPC##*#}
   MPC_POSITION="${MPC_POSITION%%/*}."
elif [[ $MPC == *\[paused\]* ]]; then
   read -r MPC_TITLE <<<"$MPC"
   MPC_POSITION=${MPC##*#}
   MPC_POSITION="${MPC_POSITION%%/*}."
   MPC_STATE="[Paused] "
else
   MPC_STATE="[stopped] "
fi

# show dmenu playlist and promp
DMENU_INPUT="$(echo "$MPC_PLAYLIST" |dmenu -i -p "$MPC_STATE$MPC_POSITION$MPC_TITLE" "$@")"

# MPD Controls
case $DMENU_INPUT in
"|")
   mpc -h $IP -p $PORT stop
   ;;
">")
   mpc -h $IP -p $PORT next
   ;;
"<")
   mpc -h $IP -p $PORT prev
   ;;
"~")
   mpc -h $IP -p $PORT toggle
   ;;
*)
   mpc -h $IP -p $PORT play ${DMENU_INPUT%% -*}
   ;;
esac
[свернуть]
Не забудьте скриптик "повесить' на сочетание клавиш, указав путь к скрипту. У меня вот так:
("M-x", spawn "/home/mindaugas/.scripts/mpdmenu")
Выглядит вот так:


Выключение, перезагрузка, активация блокировщика экрана средствами dmenu.

Это простой скрипт, который выводит информацию в dmenu. Стрелками клавиатуры Вы можете выбрать: перезапустить ПК, выключить, активировать блокировщик экрана (используется slock. Идет в поставке с пакетом suckless tools), спящий режим (гибернация) и принудительное завершение сеанса.

Вы можете данный скрипт повесить на любое сочетание клавиш. У меня вот так:
("M-r", spawn "/home/mindaugas/.scripts/shutdown.sh")

Скрипт:

Открыть содержимое (спойлер)
#!/bin/sh

cmd=$(printf "poweroff\nreboot\nsuspend\nlock\nkillX\n" | dmenu -p "Execute:" $*)

if [ -z "$cmd" ]; then
   exit 0
fi

case "$cmd" in
   poweroff)
      systemctl poweroff ;;
   reboot)
      systemctl reboot ;;
   suspend)
      systemctl suspend ;;
   lock)
      slock ;;
   killX)
      killall X ;;
   *)
      printf "Option not recognized: %s\n" "$cmd" >&2
esac
[свернуть]

Выглядит вот так:


П.С.
Не забудьте сделать скрипты выполняемыми командой chmod +x

Удачи.

ChubaDuba

Ogis1975, спасибо за CenteredMaster. Взял на вооружение.

Ogis1975

#22
Парочка скриптов, с помощью которых можно  скриншотить рабочий стол. Используется маленькая утилита  scrot.
Также для работы данных скриптов, в каталоге home", нужно создать папку "screenshots".
Первый скрипт.
При нажатие сочетаний клавиш, делается скриншот. Сделанный скриншот, автоматически отправляется в папку "screenshots".
Скрипт:

Открыть содержимое (спойлер)
#!/bin/sh
# Take screenshot of entire screen (multi-head) and display shot.
# Author: Vic Fryzel
# http://github.com/vicfryzel/xmonad-config


SCREENSHOT_DIR=$HOME/screenshots
mkdir -p $SCREENSHOT_DIR
sleep 0.2; scrot -m "$SCREENSHOT_DIR/%Y-%m-%d-%H%M%S_\$wx\$h.png" -e "xdg-open \$f"
[свернуть]

Скрипт нужно повесить на любое сочетание клавиш. У меня вот так:
"M-w", spawn "/home/mindaugas/.scripts/screenshot"

Второй скрипт делает тоже самое, но позволяет "сфоткать" выбраную область.
Скрипт:

Открыть содержимое (спойлер)
#!/bin/sh
# Allow screenshot to be selected from cursor, then display shot image.
# Author: Vic Fryzel
# http://github.com/vicfryzel/xmonad-config


SCREENSHOT_DIR=$HOME/screenshots
mkdir -p $SCREENSHOT_DIR
sleep 0.2; scrot -s "$SCREENSHOT_DIR/%Y-%m-%d-%H%M%S_\$wx\$h.png" -e "xdg-open \$f"
[свернуть]

Скрипт нужно повесить на любое сочетание клавиш. У меня вот так:

"<Print>", spawn "/home/mindaugas/.scripts/select-screenshot"

П.С.
Не забудьте сделать скрипты выполняемыми командой
chmod +x

dogsleg

Цитата: Ogis1975 от 26 марта 2018, 19:39:26При нажатие сочетаний клавиш, делается скриншот. Сделанный скриншот, автоматически отправляется в папку "screenshots".

У меня несколько другой вариант. Прямо в файле настроек xmonad:

, ((modm              , xK_Print ), spawn "scrot -e 'mv $f /home/dogsleg/screenshots/'")

Предполагается, что каталог screenshots существует, если его нет, то файл будет записан в каталог, из которого был запущен xmonad (обычно это просто домашний каталог). Зато не нужен отдельный сценарий.

ChubaDuba

У меня для скриншотов тоже scrot.
Звуковой файл после создания скриншота проигрывает mpv.
Скрипт вот такой:

#!/bin/bash

name=`date +%x-%X-%N.png`

scrot ~/Изображения/ScreenShots/$name -q 100 -d 10
mpv ~/путь_до_звукового_файла/photosound.mp3

photosound.mp3

Ogis1975

#25
Цитата: dogsleg от 26 марта 2018, 22:29:30У меня несколько другой вариант. Прямо в файле настроек xmonad:
Да, Вы правы. Можно и так.

Cообщение объединено 27 марта 2018, 15:54:49

Цитата: ChubaDuba от 27 марта 2018, 15:46:17Звуковой файл после создания скриншота проигрывает mpv.
Спасибо. Интересное решение. Попробую.

Ogis1975

"Блокнот", так называемый "Scratchpad"  для Xmonad.
Что это такое?
Это очень удобное горячее окно с плавающим терминалом. Можно использовать любой стандартный терминал. В документации указано, что поддерживаются терминалы rxvt, rxvt-unicode, xterm, но с другими терминалами проблем быть не должно.
Как это работает?
При нажатии "горячих клавиш", открывается терминал. При повторном нажатии "горячих клавиш", терминал отправляется в скрытое рабочее пространство с именем "NSP".
Теперь приступим.
Подключаем модуль
import XMonad.Util.Scratchpad
Для корректной работы, добавьте (в одну строку)
(scratchpadSpawnAction, scratchpadManageHook, scratchpadFilterOutWorkspace)
Должно выглядеть вот так
import XMonad.Util.Scratchpad (scratchpadSpawnAction, scratchpadManageHook, scratchpadFilterOutWorkspace)
В ваш manageHook нужно дописать
scratchpadManageHook (W.RationalRect 0.25 0.375 0.5 0.35)
У меня вот так
, manageHook         = manageDocks <+> scratchpadManageHook (W.RationalRect 0.25 0.375 0.5 0.35)
Обратите внимание, что блокнот у меня настроен так, чтобы он открывался в плавающем режиме по середине монитора. Вы можете настроит как вам удобнее. За расположение блокнота, отвечают значения
0.25 0.375 0.5 0.35
Теперь останется это хозяйство "повесить" на сочетание клавиш. Я использую сочетание
mod4+grave
Вы можете использовать то, что вам удобнее (символ "grave", это "~").
, ((mod4Mask , xK_grave), scratchpadSpawnAction def  {terminal = "urxvtc"})
Выглядит вот так:

ChubaDuba

#27
Цитата: Ogis1975 от 11 апреля 2018, 17:40:10..."Scratchpad"  для Xmonad.
Можно сделать чуть гибче.
Например, для терминала urxvt и файлового менеджера spacefm:

Добавляем:

import XMonad.Util.NamedScratchpad


В секцию myManageHook:


myManageHook =  composeAll $

         [ ...
         , ...
         , ...
         ]
         
         ++ [namedScratchpadManageHook scratchpads]
...


Пишем правила для нужных приложений. В нашем случае для urxvt и spacefm:


scratchpads = [
           
              NS "terminal" "urxvt -name scratchpad"
                (wm_name =? "scratchpad")
                (customFloating $ W.RationalRect 0 0.9 1 0.1),
             
              NS "spacefm" "spacefm"
                (className =? "Spacefm")
                (customFloating $ W.RationalRect 0 0.6 1 0.4),
           
              ]
             
              where
                    wm_name = stringProperty "WM_NAME"


"Вешаем" на нужные нам клавиши:


myKeys = [
           ...
         , ((0,        0xffbe), namedScratchpadAction scratchpads "terminal")   -- клавиша "F1"
         , ((mod4Mask,   xK_f), namedScratchpadAction scratchpads "spacefm")
         ...
         ]


Готово.
Открыть, скрыть/показать терминал: F1
Открыть, скрыть/показать файловый менеджер: mod4Mask + f
Чтобы открыть терминал в обычном режиме используем клавиши по умолчанию: mod4Mask + Shift + Enter


urxvt


spacefm




Cообщение объединено 12 апреля 2018, 10:53:06

Таким же способом можно запускать программу в терминале.
Например, у меня по F2 запускается календарь:


...
scratchpads = [
           
         ...
       
         NS "cal" "urxvt -name cal -hold -e cal -y"
           (wm_name =? "cal")
           (customFloating $ W.RationalRect 0.58 0.023 0.42 0.82),
         ...
         ]
...

myKeys = [
         ...
         , ((0,     0xffbf), namedScratchpadAction scratchpads "cal")  -- клавиша "F2"
         ...
         ]



ChubaDuba

#28
Вывод в xmobar информации о доступных обновлениях.

Посмотреть количество доступных обновлений можно в терминале, выполнив команды:

$ sudo apt-get update
$ aptitude search "~U" | wc -l


Как автоматизировать обновление списка пакетов я рассказывать не буду. Это можно сделать разными
способами, а вторую команду "завернём" в скрипт updates:

#! /bin/bash

NEWCOLOR="#DBA3A2"
HOLDS=2

UPDATES=$(aptitude search "~U" | wc -l)

PKGS=$(($UPDATES-$HOLDS))

if [ $PKGS == 0 ]; then exit 0

else   
   echo "<fc=$NEWCOLOR>updates:$PKGS</fc>"
fi


Тут всё просто. Единственное, стоит обратить внимание на переменную HOLDS,
задающую количество пакетов, которым запрещено обновляться при регулярном
обновлении системы. Если у вас в системе таких пакетов нет, то данной переменной
нужно присвоить значение ноль.   

Если обновлений нет, скрипт завершает свою работу. Если обновления есть,
скрипт будет выводить количество обновлений:



Остаётся лишь добавить отображение результата выполнения скрипта в
xmobar. Добавляем в xmobarrc:

```
commands = [
                ...
                Run Com "/путь_до_скрипта/updates" [] "updates" 3600,
                ...
                ]
       ...
       , template = " %StdinReader% }{ ... %updates% ...}

```

ChubaDuba

Строка ввода для xmonad.

На мой взгляд очень удобный инструмент, который должен быть на вооружении у каждого
пользователя xmonad.

Реализуется это двумя модулями XMonad.Prompt и XMonad.Prompt.Shell.

Добавляем эти модули в наш xmonad.hs:


import XMonad.Prompt
import XMonad.Prompt.Shell


Задаём комбинацию клавиш, при нажатии которой будет открываться строка ввода. Для себя я выбрал комбинацию mod4Mask+p. Добавляем её в наш конфиг:


, ((mod4Mask,   xK_p), shellPrompt defaultXPConfig)


После внесения всех этих изменений, при нажатии выбранной комбинации в нижней части экрана будет появляться строка ввода. Закрыть её можно нажав клавишу Esc:



Мне не понравилось то, что строка открывается внизу экрана, имеет очень мелкий шрифт, и её цветовое оформление не сочетается с моими настройками. Чтобы всё это изменить, я добавил в xmonad.hs свою конфигурацию окна строки ввода myXPConfig, в которой указал нужные мне параметры:


-- Prompt

myXPConfig = defaultXPConfig
         { font                = myFont
         , bgColor             = "#2F2F2F"
         , fgColor             = "#709180"
         , bgHLight            = "#2F2F2F"
         , fgHLight            = "#F0E0AF"
         , promptBorderWidth   = 0
         , position            = Top
         , height              = 20
         , historySize         = 100
         , historyFilter       = deleteConsecutive
         }


Соответственно, внёс изменения для комбинации клавиш, заменив defaultXPConfig на myXPConfig. Теперь строчка в конфиге будет иметь вот такой вид:


, ((mod4Mask,   xK_p), shellPrompt myXPConfig)


После этих изменений всё стало так, как нужно мне:




Чтобы каждый раз не вводить в строку однотипные команды, например, команду urxvt -e для открытия консольного приложения в новом окне терминала, эту команду можно прописать в myXPConfig следующим образом:


myXPConfig = defaultXPConfig
         { ...
         , defaultText = "urxvt -e"
         ...
         }


Теперь при запуске строка ввода будет иметь такой вид: