Модальные команды со стрекозой - PullRequest
0 голосов
/ 26 сентября 2019

Я использую dragonfly2 , и я хочу создать грамматику, которая, как и vim, является модальной.Я хочу иметь возможность включать и отключать грамматику с помощью команд.

Например, если я скажу link, у меня есть действие, которое показывает список возможных ссылок на экране с двухбуквенными метками, поэтому яхочу, чтобы грамматика включала режим, который принимает только двухбуквенные слова.В частности, после произнесения link я не хочу, чтобы грамматика принимала какие-либо нормальные команды, например, другую link.

Возможно ли это?

1 Ответ

0 голосов
/ 26 сентября 2019

Ах, ха!Я только что нашел это в чужой грамматике :

class PythonEnabler(CompoundRule):
    spec = "Enable Python"                  # Spoken command to enable the Python grammar.

    def _process_recognition(self, node, extras):   # Callback when command is spoken.
        pythonBootstrap.disable()
        pythonGrammar.enable()
        print "Python grammar enabled"

class PythonDisabler(CompoundRule):
    spec = "switch language"                  # spoken command to disable the Python grammar.

    def _process_recognition(self, node, extras):   # Callback when command is spoken.
        pythonGrammar.disable()
        pythonBootstrap.enable()
        print "Python grammar disabled"

pythonBootstrap = Grammar("python bootstrap")                
pythonBootstrap.add_rule(PythonEnabler())
pythonBootstrap.load()

pythonGrammar = Grammar("python grammar")
pythonGrammar.add_rule(PythonTestRule())
pythonGrammar.add_rule(PythonCommentsSyntax())
pythonGrammar.add_rule(PythonControlStructures())
pythonGrammar.add_rule(PythonDisabler())

Таким образом, вы можете просто использовать some_grammar.disable() или some_grammar.enable!

...