gpt4 book ai didi

encryption - 如何在 Sublime Text 中保存文件之前获取用户输入

转载 作者:行者123 更新时间:2023-12-04 20:07:14 29 4
gpt4 key购买 nike

我正在 Sublime Text 中制作一个插件,提示用户输入密码以在保存文件之前对其进行加密。在执行保存之前执行的 API 中有一个钩子(Hook),所以我的幼稚实现是:

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

问题在于,当出现输入面板供用户输入密码时,文档已经保存(尽管触发器是“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')
self.view.settings().set('ENCODED', False)

但这很麻烦,如果用户取消加密,那么明文文件就会被保存,这并不理想。有什么想法吗?

编辑:我想我可以通过覆盖默认 save 来干净利落地做到这一点命令。我希望通过使用 on_text_command 来做到这一点或 on_window_command触发,但似乎 save命令不会触发其中任何一个(也许它是一个应用程序命令?但没有 on_application_command )。有没有办法覆盖保存功能?

编辑:我最终只是覆盖了 TextCommand 的默认键绑定(bind),似乎没有问题。

最佳答案

您需要创建一个新命令来覆盖现有的保存行为以执行您想要的操作。如您所见,show_input_panel命令是异步的。因此,该命令在创建输入面板后“完成”。而不是使用on_pre_save您可能想尝试创建一个 TextCommand进行保存。同样,这样做的缺点是您必须覆盖现有的键绑定(bind)。我想您可以使用 ST3 中可用的命令监听器,但我不知道您是否也在尝试创建与 ST2 兼容的插件。

关于encryption - 如何在 Sublime Text 中保存文件之前获取用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24195196/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com