I might do that. A good place would be
https://github.com/qtile/qtile/blob/develop/docs/manual/config/keys.rst#lazy-functions

I would like to describe all the commands from most layouts, so I would 
need to explore the available commands from the layouts using qsh first. 

Do you think the when command itself needs a python doc-string?

On Thursday, April 23, 2015 at 4:54:15 PM UTC-4, Craig Barnes wrote:
>
> I had to use the source to find that nuget ;) 
>
> I happened across it while figuring out how cmd works. 
>
> https://github.com/qtile/qtile/blob/develop/libqtile/command.py#L280 
>
> Please feel free to submit a doc-string ;-) 
>
> On 23 April 2015 at 21:32, Martin <[email protected] <javascript:>> 
> wrote: 
> > 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]> 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]. 
> >> > 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] <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.

Reply via email to