conformal / spectrwm

A small dynamic tiling window manager for X11.
ISC License
1.34k stars 97 forks source link

iconify dmenu with option #322

Closed kristoferus75 closed 4 years ago

kristoferus75 commented 4 years ago

Hi !

The uniconified windows are shown with dmenu ! My dmenu ist patched and i want that dmenu ist started with an option -l 20 to see all iconified windows at a glance !

How can i achive this ?

kind regards

kristoferus75

LordReg commented 4 years ago

Hi @kristoferus75,

From the PROGRAMS section of the man page, the default program entry for search is:

dmenu $dmenu_bottom -i -fn $bar_font -nb $bar_color -nf $bar_font_color -sb $bar_color_selected -sf $bar_font_color_selected

uniconify, search_win and search_workspace all use program[search]

You can override in your spectrwm.conf like this:

program[search] = dmenu $dmenu_bottom -i -fn $bar_font -nb $bar_color -nf $bar_font_color -sb $bar_color_selected -sf $bar_font_color_selected -l 20
kristoferus75 commented 4 years ago

Hi !

Thanks it works :-) Now i see all iconify windows of that one workspace !

Is it also possible to see all iconify windows from all workspaces and jump then to this selected ?

Or to see all windows from all workspaces and also all iconify windows form all workspaces ?

this dmenu script is use to see all windows and also iconify windows :

But if i select the iconfy windows it doesnt open ?

#!/bin/bash

# dmenu cannot display more than 30 lines, to avoid screen clutter. Only relevant if you have more than 30 windows open.
height=$(wmctrl -l | wc -l)
if [[ $height -gt 30 ]]
        then heightfit=30
        else heightfit=$height
fi

num=$(wmctrl -l | sed 's/  / /' | cut -d " " -f 4- | nl -w 3 -n rn | sed -r 's/^([ 0-9]+)[ \t]*(.*)$/\1 - \2/' | sed -e '/xfce4-panel/d' -e '/Schreibtisch/d' | dmenu -b -i -p "Windows" -l $heightfit | cut -d '-' -f -1)
[[ -z "$num" ]] && exit
wmctrl -l | sed -n "$num p" | cut -c -10 | xargs wmctrl -i -a

kind regards

kristoiferus75

LordReg commented 4 years ago

There is a fix for wmctrl -a in master branch newer than 3.3.0. Tested your script and it works.

Also, if you want to list just iconified windows, you could use xprop -id <winid> WM_STATE in your script to check each window for window state: Iconic.

kristoferus75 commented 4 years ago

Thanks ! Hmm i see the iconic window with my script but if want uniconfy it (open) idoesnt work !

pacman -Qi spectrwm Name : spectrwm Version : 3.3.0-1

LordReg commented 4 years ago

The fix is not included in 3.3.0. You could try spectrwm-git from AUR or wait for 3.4.0.

kristoferus75 commented 4 years ago

ok i understand no problem i can wait :-)

Thanks a lot for your help !!!!!

kind regards

kristoferus75

desdic commented 4 years ago

I sort of have an issue that might be the same but not sure.

# yay -Qi spectrwm-git
Name            : spectrwm-git
Version         : 20200514-1
Description     : A minimalistic dynamic tiling window manager that tries to stay out of the way.
Architecture    : x86_64
URL             : http://www.spectrwm.org
Licenses        : custom:ISC
Groups          : None
Provides        : scrotwm  spectrwm
Depends On      : dmenu  xcb-util  xcb-util-wm  xcb-util-keysyms  libxrandr  libxft  libxcursor  terminus-font
Optional Deps   : scrot: screenshots [installed]
                  xlockmore: screenlocking
Required By     : None
Optional For    : None
Conflicts With  : scrotwm  spectrwm
Replaces        : scrotwm
Installed Size  : 253,88 KiB
Packager        : Unknown Packager
Build Date      : 2020-05-14T17:52:21 CEST
Install Date    : 2020-05-14T17:52:38 CEST
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : None

Keybinding to bind[uniconify] = MOD+Shift+w .. if I iconify a windows it disappears as expected and I can see in the top bar that its been iconified. But pressing Mod+Shift+w does nothing. I have dmenu and dmenu_run but they are never invoked (Tried to replace them with a dummy to see if they where called but no.

If I create a term with a sleep 300, iconify it and then gets the WM_STATE its this:

xprop -id 0x02a00005 WM_STATE WM_STATE(WM_STATE): window state: Iconic icon window: 0x0 And for some reason mumble gets auto iconified after a while and then I'm unable to retrieve it.

Is this the same problem or is mine something else ?

LordReg commented 4 years ago

@desdic Are you using an alternate keyboard layout? If you run xev what is the output for KeyPress event when you press the w key? What about MOD+Shift+w?

LordReg commented 4 years ago

@kristoferus75 is your issue with uniconify solved with spectrwm-git?

desdic commented 4 years ago

@desdic Are you using an alternate keyboard layout? If you run xev what is the output for KeyPress event when you press the w key? What about MOD+Shift+w?

No its a standard US layout

FocusOut event, serial 34, synthetic NO, window 0x3e00001,
    mode NotifyGrab, detail NotifyAncestor

FocusOut event, serial 34, synthetic NO, window 0x3e00001,
    mode NotifyUngrab, detail NotifyPointer

FocusIn event, serial 34, synthetic NO, window 0x3e00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 34, synthetic NO, window 0x0,
    keys:  0   0   0   0   0   0   4   0   0   0   0   0   0   0   0   0
           32  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

KeyRelease event, serial 34, synthetic NO, window 0x3e00001,
    root 0x26a, subw 0x0, time 18109523, (268,783), root:(1980,823),
    state 0x41, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x3e00001,
    root 0x26a, subw 0x0, time 18109523, (268,783), root:(1980,823),
    state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False
desdic commented 4 years ago

@kristoferus75 is your issue with uniconify solved with spectrwm-git?

No I'm running the spectrwm-git now and I cannot uniconify

kristoferus75 commented 4 years ago

@desdic Yes i have no problems now -> all work as excpected !

desdic commented 4 years ago

@desdic Yes i have no problems now -> all work as excpected !

Can I see your config just in case that I did something wrong ? Btw. I even tried the default config but it never actually starts on arch

kristoferus75 commented 4 years ago

@desdic bind[iconify] = MOD+Control+w

LordReg commented 4 years ago

@desdic The default bar_font setting currently doesn't work on Arch. At minimum, you need a spectrwm.conf with a bar_font setting like:

bar_font = xos4 Terminus:pixelsize=14:antialias=true
kristoferus75 commented 4 years ago

@desdic Perhaps this help you : autorun = ws[1]:setxkbmap -layout de

desdic commented 4 years ago

Figured out my problem .. when I have bar_font = Mononoki Nerd Font:size=9, JoyPixels:size=9, FontAwesome:size=9, icomoon-feather:size=9, Ubuntu Condensed:size=9, Noto Color Emoji:size=9

spectrwm fails silently and never calls dmenu for the uiconify. With the suggested font 'xos4 Terminus' dmenu presents what looks like a windows ID

But as soon as I add a second font (That actually renders just fine in the bar) like this bar_font = xos4 Terminus:pixelsize=14:antialias=true,JoyPixels:size=9 uniconify stops working

The reason why its failing is size != pixelsize but there is no errors

LordReg commented 4 years ago

@desdic the issue you describe appears to be the same as #223. Basically, bar_font is passed to dmenu via the $bar_font variable. If dmenu is unable to load -fn "$bar_font", then uniconify will fail. You can test with

echo "Test1 Test2" | dmenu -fn "xos4 Terminus:pixelsize=14:antialias=true"
echo "Test1 Test2" | dmenu -fn "Mononoki Nerd Font:size=9, JoyPixels:size=9, FontAwesome:size=9, icomoon-feather:size=9, Ubuntu Condensed:size=9, Noto Color Emoji:size=9"

A workaround (until #233 is solved) is to modify the dmenu spawns to use a specific font rather than the $bar_font variable. For example:

program[menu] = dmenu $dmenu_bottom -fn "xos4 Terminus:pixelsize=14:antialias=true" -nb $bar_color -nf $bar_font_color -sb $bar_color_selected -sf $bar_font_color_selected
program[search] = dmenu $dmenu_bottom -i -fn "xos4 Terminus:pixelsize=14:antialias=true" -nb $bar_color -nf $bar_font_color -sb $bar_color_selected -sf $bar_font_color_selected
program[name_workspace] = dmenu $dmenu_bottom -p -fn "xos4 Terminus:pixelsize=14:antialias=true" -nb $bar_color -nf $bar_font_color -sb $bar_color_selected -sf $bar_font_color_selected

Closing this issue now since the original issue is already solved ;)