On Saturday, May 16, 2015 at 6:26:17 PM UTC-5, Edward K. Ream wrote:

> I think you have solved all the problems...

No, it doesn't work.  In ​leo/commands/helpCommands I replaced:​

def cmd(name):
    '''Command decorator for the helpCommands class.'''
    return g.new_cmd_decorator(name,['c','helpCommands',])

with cmd = g.cmd where g.cmd is defined as you suggest, except it makes 
entries in g.global_commands_dict.  I also added traces.

# Use as function/method decorator
def cmd(*command_names):

    class Decorator:

        def __init__(self, func):

            self.func = func
            g.trace(command_names,str(func))
            try: # Python3
                self.isMethod = '.' in func.__qualname__
            except AttributeError: # Python2
                self.isMethod = 'instance' in str(func)
            for command_name in command_names:
                global_commands_dict[command_name] = self.__call__

        def __call__(self, *args, **kwargs):
            g.trace('func: %s\narg: %s\nkwargs: %s' % (self.func,args,kwargs
))
            if self.isMethod:
                return self.func(args[0], *args, **kwargs)
            else:
                return self.func(*args, **kwargs)

    return Decorator

Here are the traces when Leo loads:
...
reading settings in C:\leo.repo\leo-editor\leo\config\leoSettings.leo
__init__ ('help',) <function help at 0x02C4FF70>
__init__ ('help-for-abbreviations',) <function helpForAbbreviations at 
0x02C53070>
__init__ ('help-for-autocompletion',) <function helpForAutocompletion at 
0x02C53130>
__init__ ('help-for-bindings',) <function helpForBindings at 0x02C531F0>
__init__ ('help-for-command',) <function helpForCommand at 0x02C532B0>
__init__ ('help-for-creating-external-files',) <function 
helpForCreatingExternalFiles at 0x02C53430>
__init__ ('help-for-debugging-commands',) <function 
helpForDebuggingCommands at 0x02C53530>
__init__ ('help-for-drag-and-drop',) <function helpForDragAndDrop at 
0x02C535B0>
__init__ ('help-for-dynamic-abbreviations',) <function 
helpForDynamicAbbreviations at 0x02C53670>
__init__ ('help-for-find-commands',) <function helpForFindCommands at 
0x02C53730>
__init__ ('help-for-minibuffer',) <function helpForMinibuffer at 0x02C537F0>
__init__ ('help-for-regular-expressions',) <function 
helpForRegularExpressions at 0x02C538B0>
__init__ ('help-for-scripting',) <function helpForScripting at 0x02C53970>
__init__ ('print-settings',) <function printSettings at 0x02C53A30>
__init__ ('help-for-python',) <function pythonHelp at 0x02C53AF0>
reading settings in c:\Users\edreamleo\.leo\myLeoSettings.leo
reading settings in C:\Users\edreamleo\ekr.leo
...

As you can see, everything is a function.  Naturually, this causes a code 
crash when the init method executes. For example, F12 (python-help) gives:

exception executing command
Traceback (most recent call last):
  File "c:\leo.repo\leo-editor\leo\core\leoCommands.py", line 6886, in 
doCommand
    val = command(event)
  File "c:\leo.repo\leo-editor\leo\core\leoGlobals.py", line 1452, in 
__call__
    return self.func(*args, **kwargs)
  File "c:\leo.repo\leo-editor\leo\commands\helpCommands.py", line 1114, in 
pythonHelp
    k.getArg(event,tag,1,self.pythonHelp)
AttributeError: LeoKeyEvent instance has no attribute 'pythonHelp'

Maybe I'm misunderstanding something.  Reinhard, the ball is in your court.

Edward

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to leo-editor+unsubscr...@googlegroups.com.
To post to this group, send email to leo-editor@googlegroups.com.
Visit this group at http://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.

Reply via email to