You are right, the following works as intended

groups = [Group(i) for i in "neio"]

for i in groups:
    keys.append(
        Key([mod], i.name, lazy.group[i.name].toscreen())
    )

# Append ' key group
a = Group("'")
keys.append(
    Key([mod], 'apostrophe', lazy.group[a.name].toscreen())
)
groups.append(a)  # Here is the fix

But why is this the case? I don't see the 'groups' variable used anywhere 
else in the config, except the for loop.
It turns out that if I rename the groups variable to something else, the 
groups will be defined by default Qtile settings.

In other words, groups is a magic variable of some sort. I am not a very 
good programmer, but isn't this a bit odd and counterintuitive? To me, the 
following or something similar would make more sense:

from libqtile.config import Group
Group.groups = ....

Is groups a global variable?

Btw, thanks for the help, it works like a charm :)

On Thursday, April 2, 2015 at 10:49:00 AM UTC-4, Roger wrote:
>
>
> On Apr 2, 2015 11:37 AM, "Martin" <[email protected] <javascript:>> 
> wrote:
> >
> > I would like to use the appostrophe character as a group, but I can't 
> get it to work properly.
> >
> > This is what I try:
> >
> > # Regular key assignment
> > group_str = "hneio"  # Apostrophe is right next to o character and would 
> be super convenient to use
> > # Yes, my keyboard layout is a bit unusual
> >
> > groups = [Group(i) for i in group_str]
> >
> > for i in groups:
> >     # mod1 + letter of group = switch to group
> >     keys.append(
> >         Key([mod], i.name, lazy.group[i.name].toscreen())
> >     )
> >     # mod1 + shift + letter of group = switch to & move focused window 
> to group
> >     keys.append(
> >         Key([mod, "shift"], i.name, lazy.window.togroup(i.name))
> >     )
> > # Append special ' key group outside for loop
> > a = Group("Q")  # Name shouldn't be an issue
> you have to put this group, a, inside groups list
>
> > keys.append(
> >     Key([mod], 'apostrophe', lazy.group[a.name].toscreen())
> > )
> > keys.append(
> >     Key([mod, "shift"], 'apostrophe', lazy.window.togroup(a.name))
> > )
> >
> > Using MOD+' and MOD+SHIFT+' actually activates the lazy.group commands, 
> but it gives an error and the output is
> >
> > 2015-04-02 10:28:01,394 qtile handle_KeyPress:855  KB command error 
> toscreen: No object group['Q'] in path 'group['Q']'
> > 2015-04-02 10:28:03,433 qtile _xpoll:656  Handling: KeyPress
> > 2015-04-02 10:28:03,433 qtile handle_KeyPress:855  KB command error 
> toscreen: No object group['Q'] in path 'group['Q']'
> > 2015-04-02 10:28:04,213 qtile _xpoll:656  Handling: KeyPress
> > 2015-04-02 10:28:04,214 qtile call:91  Command: togroup(('Q',), {})
> > 2015-04-02 10:28:04,214 qtile handle_KeyPress:855  KB command error 
> togroup: No such group: Q
> > 2015-04-02 10:28:05,056 qtile _xpoll:656  Handling: KeyPress
> > 2015-04-02 10:28:05,056 qtile call:91  Command: togroup(('Q',), {})
> > 2015-04-02 10:28:05,057 qtile handle_KeyPress:855  KB command error 
> togroup: No such group: Q
> >
> > Any idea of what is going wrong here? If I test the code, everything 
> works but there is no Q group in the GroupBox widget and the command gives 
> a non-critical error. Even if I don't use approstrophe, I cannot assign a 
> group outside the for i in groups: for loop. Why not? 
> >
> > I don't know how I would assign the apostrophe inside the for loop. I 
> have tried:
> >
> > groups = [Group(i) for i in "hneio'"]
> > groups = [Group(i) for i in "hneio\'"]
> >
> > with no success. 
> >
> > -- 
> > 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.
>  

-- 
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