I like to use different layouts for different purposes, but I do not wish
to map a key to every single required layout command for all layouts. For
instance, in the tile layout I often use the increase_ratio/decrease_ratio
commands which are set to MOD+H, MOD+L
These super-useful keys are however of no use in the other layouts and when
I use those layouts I would like to map the keys to something else. What
would be a sane way to do this?
My suggested approach is:
1. Use subscribe.focus_change hook to detect a situation where the keys
might need to change
2. Querry the layout_type / name of the current layout for the current
window / current group / current screen
3. Overwrite the key-bindings with a static set common for all layouts and
a dynamic part which depends on the particular layout.
My first question is if the above is sane? I would call quite a few key
changes, and also floating and dialog windows and pop-ups may be dangerous
if not managed correctly.
Second question is how to get it to work.
I have tried implementing 1 and 2 in the code below, but it doesn't work:
@hook.subscribe.focus_change
def change_layout():
name = ????
if name == 'tile':
layout_tile()
elf name == 'max
layout_max()
I cannot querry the name of the layout in a hook. What I can do is
keys.append(
Key([mod], "f", lazy.function(function))
)
def function(qtile):
test = qtile.currentLayout.name
This works just fine, but for the hook function neither of the below works:
###
@hook.subscribe.focus_change
def change_layout(window):
doens't work, if there is an argument in the function, the hook will
not execute anything. This makes no sense to me.
###
c = Client()
@hook.subscribe.focus_change
def change_layout():
name = c.currentLayout.name
name2 = c.this_makes_no_sense.name
returns the string currentLayout. I can even get it to run
c.this_makes_no_sense.name and get the string this_makes_no_sense as a
result. That is insane.
###
def test(qtile)
name = qtile.currentLayout.name
@hook.subscribe.focus_change
def change_layout():
lazy.function(test)
will not call the function, but does not give any errors either.
A problem I keep having is the API which I find insufficient for my needs.
The only way for me to find the commands I need is by browsing this google
group and look for whatever I can find. For instance, there is no place
where the currentLayout method or property is mentioned in the
documentation. I cannot find it in the qsh shell either and I am too much
of a noob to search the source code (I have tried, but the code is
gibberish to me). The documentation keeps refering to the qsh, but the
commands in there are of limited use. For instance, the qsh doesn't contain
a command to querry information about the current layout, but the object
passed by lazy.function (I guess it is an instance of Qtile?) have a
currentLayout command which works.
My rant seems to be that there is no api for the Client() object, nor the
object passed by lazy, but these objects contain usefull methods which are
unavailable in qsh.
Oddly enough, I cannot get the commands in qsh to work either. I should be
able to get the current layout by
cd groups
info
get the 'layout' key value
But the following command gives an exception
c = Client()
keys.append(
Key([mod], "f", lazy.function(test))
)
def test(qtile):
name = c.groups.info['layout']
# This doesn't work, because .info is a _Command object
# So is c.groups.insanity
I also tried
c = Client()
test = c.group
print(dir(test))
to get a list of the methods in group, but there are hardly any and a
command like print c.status() also doens't work, since it is also a
_Command object.
Sorry for a long rant, as I was writing this I kept getting ideas that I
wanted to try out, but that didn't make me any less confused. I use a
notify-send event to check when commands are being excecuted and print
debug information this way. I catch any exception with a notify-send as
well.
I find the behaviour of my system rather strange. Is there something wrong
with my Qtile installation or have I missed something critical?
Any assistance is appreciated
--
You received this message because you are subscribed to the Google Groups
"qtile-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.