Excellent, it also makes a lot of sense to have this capability rather than
to add a lot of funny code in the config.
Is this knowledge included in the API or documentation?
Best regards
On Wednesday, April 22, 2015 at 6:40:20 PM UTC-4, Craig Barnes wrote:
>
> The capability already exists. There is a when method to each of the
> lazy.jayout functions which can be used to trigger for selected
> layouts only.
>
> e.g.
>
> # Multi function keys
> Key(
> [mod, "shift"], "space",
> lazy.layout.rotate().when('stack'),
> lazy.layout.flip().when('xmonad-tall'),
> ),
> Key(
> [mod, "shift"], "k",
> lazy.layout.shuffle_down().when('stack'),
> lazy.layout.shuffle_down().when('vert'),
> lazy.layout.shuffle_down().when('xmonad-tall'),
> ),
> Key(
> [mod, "shift"], "j",
> lazy.layout.shuffle_up().when('stack'),
> lazy.layout.shuffle_up().when('xmonad-tall'),
> ),
> Key(
> [mod, ctl], "l",
> lazy.layout.add().when('stack'),
> lazy.layout.increase_ratio().when('tile'),
> lazy.layout.maximize().when('xmonad-tall'),
> ),
> Key(
> [mod, ctl], "h",
> lazy.layout.delete().when('stack'),
> lazy.layout.decrease_ratio().when('tile'),
> lazy.layout.normalize().when('xmonad-tall'),
> ),
> Key(
> [mod, ctl], "k",
> lazy.layout.shrink().when('xmonad-tall'),
> lazy.layout.decrease_nmaster().when('tile'),
> ),
> Key(
> [mod, ctl], "j",
> lazy.layout.grow().when('xmonad-tall'),
> lazy.layout.increase_nmaster().when('tile'),
> ),
>
>
> Hope this helps
>
> On 22 April 2015 at 22:56, Martin <[email protected] <javascript:>>
> wrote:
> > 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] <javascript:>.
> > For more options, visit https://groups.google.com/d/optout.
>
>
>
> --
> Craig
>
--
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.