我正在Sublime Text中制作一个插件,该插件会提示用户输入密码以在文件保存之前对其进行加密。在执行保存之前,已执行的API中有一个钩子,因此我的简单实现是:
class TranscryptEventListener(sublime_plugin.EventListener):
def on_pre_save(self, view):
# If document is set to encode on save
if view.settings().get('ON_SAVE'):
self.view = view
# Prompt user for password
message = "Create a Password:"
view.window().show_input_panel(message, "", self.on_done, None, None)
def on_done(self, password):
self.view.run_command("encode", {password": password})
Run Code Online (Sandbox Code Playgroud)
这样做的问题是,当输入面板出现供用户输入密码时,该文档已经保存(尽管触发器为“ on_pre_save”)。然后,一旦用户点击enter,文档将被很好地加密,但情况是存在一个保存的纯文本文件,以及一个填充了加密文本的修改后的缓冲区。
因此,在执行保存之前,我需要让Sublime Text等待用户输入密码。有没有办法做到这一点?
目前,加密完成后,我只是手动重新保存:
def on_pre_save(self, view, encode=False):
if view.settings().get('ON_SAVE') and not view.settings().get('ENCODED'):
self.view = view
message = "Create a Password:"
view.window().show_input_panel(message, "", self.on_done, None, None)
def on_done(self, password):
self.view.run_command("encode", {password": password})
self.view.settings().set('ENCODED', True)
self.view.run_command('save') …Run Code Online (Sandbox Code Playgroud)