C钩子管理器应该是%pythoncode类还是其他类?
我正在使用SWIG将Python脚本添加到C程序中。该程序是一个文本编辑器,具有面向“命令”的体系结构:定义了各种命令,例如:(枚举标签):C钩子管理器应该是%pythoncode类还是其他类?,python,swig,python-embedding,Python,Swig,Python Embedding,我正在使用SWIG将Python脚本添加到C程序中。该程序是一个文本编辑器,具有面向“命令”的体系结构:定义了各种命令,例如:(枚举标签):复制,粘贴,剪切,向上,向下,左,左,右,退格,删除, PageUp,PageDown,主页,结束,选项卡,撤消,重做等等 我认为Python脚本的一个有用特性是在任何命令之前/之后运行钩子,即:在应用程序Python模块(称为myapp)中注册的Python可调用项,然后在适当的时候从C代码运行 但是这样的钩子机制将是一项大量的工作,因此我希望通过%pyt
复制
,粘贴
,剪切
,向上
,向下
,左
,左
,右
,退格
,删除
,
PageUp
,PageDown
,主页
,结束
,选项卡
,撤消
,重做
等等
我认为Python脚本的一个有用特性是在任何命令之前/之后运行钩子,即:在应用程序Python模块(称为myapp
)中注册的Python可调用项,然后在适当的时候从C代码运行
但是这样的钩子机制将是一项大量的工作,因此我希望通过%pythoncode{…}
在Python中实现尽可能多的钩子机制。这就是我目前拥有的:
from collections import namedtuple
Hook = namedtuple('Hook', 'mc_cmd callback run_after')
class HookKinds:
def __init__(self, before, after):
self.before = before
self.after = after
class HookMgr:
def __init__(self):
self._hooks = {}
def reg(self, mc_cmd, callback, run_after = False):
hook = Hook(mc_cmd, callback, run_after);
if mc_cmd in self._hooks:
if run_after:
self._hooks[mc_cmd].after = hook
else:
self._hooks[mc_cmd].before = hook
else:
if run_after:
self._hooks[mc_cmd] = HookKinds(None, hook)
else:
self._hooks[mc_cmd] = HookKinds(hook, None)
self._hooks[mc_cmd]
def unreg(self, mc_cmd, run_after = False):
if run_after:
if self._hooks[mc_cmd].after is not None:
self._hooks[mc_cmd].after = None
else:
if self._hooks[mc_cmd].before is not None:
self._hooks[mc_cmd].before = None
if (self._hooks[mc_cmd].before is None) and (self._hooks[mc_cmd].after is None):
del self._hooks[mc_cmd]
hooks = HookMgr()
call = lambda x: x
hooks.reg('EditFile', call, True)
我有以下问题: