diff options
author | A Farzat <a@farzat.xyz> | 2022-05-14 16:17:42 +0900 |
---|---|---|
committer | A Farzat <a@farzat.xyz> | 2022-05-14 16:17:42 +0900 |
commit | 42cbe43c76ac89edb27819db6e33a804ac3bf922 (patch) | |
tree | 65ac566f5a2e7c4e95ef37ceca85daf77342dc4f /edit.py | |
parent | 8499a1e4730828b46cdf03dfc285556b70a1a610 (diff) | |
parent | 3cf2b087559f3d9778bb30883968eaa8fb8f9e38 (diff) | |
download | edit-42cbe43c76ac89edb27819db6e33a804ac3bf922.tar.gz edit-42cbe43c76ac89edb27819db6e33a804ac3bf922.zip |
Merge branch 'oblitum/extension-and-fences'
Diffstat (limited to 'edit.py')
-rw-r--r-- | edit.py | 68 |
1 files changed, 45 insertions, 23 deletions
@@ -1,7 +1,8 @@ # Open your $EDITOR to compose a message in weechat # # Usage: -# /edit +# /edit [extension] +# /fenced [extension] # # Optional settings: # /set plugins.var.python.edit.editor "vim -f" @@ -20,9 +21,14 @@ import shlex import subprocess import weechat +FILE = "" +FENCED = False + + def xdg_cache_dir(): return os.path.expanduser(os.environ.get("XDG_CACHE_HOME", "~/..cache/")) + def weechat_cache_dir(): cache_dir = os.path.join(xdg_cache_dir(), "weechat") if os.path.exists(cache_dir): @@ -30,14 +36,11 @@ def weechat_cache_dir(): return os.path.expanduser(os.environ.get("WEECHAT_HOME", "~/.weechat/")) -PATH = os.path.join(weechat_cache_dir(), "message.txt") - - def editor_process_cb(data, command, return_code, out, err): buf = data if return_code != 0: - cleanup(PATH, buf) + cleanup(buf) weechat.prnt("", "{}: {}".format( err.strip(), return_code @@ -45,28 +48,30 @@ def editor_process_cb(data, command, return_code, out, err): return weechat.WEECHAT_RC_ERROR if return_code == 0: - read_file(PATH, buf) - cleanup(PATH, buf) + read_file(buf) + cleanup(buf) return weechat.WEECHAT_RC_OK -def cleanup(path, buf): +def cleanup(buf): try: - os.remove(path) + os.remove(FILE) except (OSError, IOError): pass weechat.command(buf, "/window refresh") -def read_file(path, buf): +def read_file(buf): try: - with open(PATH) as f: + with open(FILE) as f: text = f.read() if text[-1] == "\n": text = text[:-1] # remove trailing newline if exists. + if FENCED: + text = "```\n" + text + "\n```" weechat.buffer_set(buf, "input", text) weechat.buffer_set(buf, "input_pos", str(len(text))) @@ -77,26 +82,26 @@ def read_file(path, buf): weechat.command(buf, "/window refresh") -def hook_editor_process(terminal, editor, path, buf): +def hook_editor_process(terminal, editor, buf): term_cmd = "{} -e".format(terminal) - editor_cmd = "{} {}".format(editor, path) + editor_cmd = "{} {}".format(editor, FILE) weechat.hook_process("{} \"{}\"".format( term_cmd, editor_cmd ), 0, "editor_process_cb", buf) -def run_blocking(editor, path, buf): - cmd = shlex.split(editor) + [path] +def run_blocking(editor, buf): + cmd = shlex.split(editor) + [FILE] code = subprocess.Popen(cmd).wait() if code != 0: - cleanup(path, buf) + cleanup(buf) - read_file(path, buf) + read_file(buf) -def edit(data, buf, args): +def edit(data, buf, args, fenced=False): editor = (weechat.config_get_plugin("editor") or os.environ.get("EDITOR", "vim -f")) @@ -110,24 +115,41 @@ def edit(data, buf, args): ) run_externally = bool(run_externally) - with open(PATH, "w+") as f: + global FILE, FENCED + + FILE = os.path.join(weechat_cache_dir(), "message." + ("md" if not args else args)) + + FENCED = fenced + + with open(FILE, "w+") as f: f.write(weechat.buffer_get_string(buf, "input")) if run_externally: - hook_editor_process(terminal, editor, PATH, buf) + hook_editor_process(terminal, editor, buf) else: - run_blocking(editor, PATH, buf) + run_blocking(editor, buf) return weechat.WEECHAT_RC_OK +def fenced(data, buf, args): + return edit(data, buf, args, fenced=True) + + def main(): if not weechat.register("edit", "Keith Smiley", "1.0.0", "MIT", "Open your $EDITOR to compose a message", "", ""): return weechat.WEECHAT_RC_ERROR - weechat.hook_command("edit", "Open your $EDITOR to compose a message", "", - "", "", "edit", "") + weechat.hook_command("edit", "Open your $EDITOR to compose a message", + "[extension]", + "extension: extension for temporary composing file", + "extension", "edit", "") + weechat.hook_command("fenced", "Open your $EDITOR to compose a message" + " with automatic code fences", + "[extension]", + "extension: extension for temporary composing file", + "extension", "fenced", "") if __name__ == "__main__": |