From 9485a49c7e77463b02049358fc10fe3e75f318c9 Mon Sep 17 00:00:00 2001 From: Billy Date: Fri, 11 Oct 2024 20:27:53 +0530 Subject: [PATCH] fix: Fixed app crashes due to hover renderer shrink property --- resources/linux/icon.ico | Bin 0 -> 186807 bytes src/biscuit/commands.py | 10 +++- src/biscuit/common/ui/icon.py | 15 +++-- src/biscuit/editor/hover/hover.py | 57 +++++++++---------- src/biscuit/editor/hover/renderer.py | 24 ++++++-- src/biscuit/language/NOTICE | 2 - src/biscuit/language/utils.py | 82 +++++++++++++-------------- src/biscuit/views/debug/debug.py | 2 +- 8 files changed, 104 insertions(+), 88 deletions(-) create mode 100644 resources/linux/icon.ico delete mode 100644 src/biscuit/language/NOTICE diff --git a/resources/linux/icon.ico b/resources/linux/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7c0a28a395808820522263549b572328cef60a4d GIT binary patch literal 186807 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 literal 0 HcmV?d00001 diff --git a/src/biscuit/commands.py b/src/biscuit/commands.py index e6d024d0..7eb65241 100644 --- a/src/biscuit/commands.py +++ b/src/biscuit/commands.py @@ -61,7 +61,7 @@ def open_recent_file(self, *_): def open_recent_dir(self, *_): self.base.palette.show("recentd:") - + def restore_last_closed_editor(self, *_) -> None: self.base.editorsmanager.restore_last_closed_editor() @@ -134,8 +134,12 @@ def minimize_biscuit(self, *_) -> None: if platform.system() == "Windows": from ctypes import windll - hwnd = windll.user32.GetParent(self.base.winfo_id()) - windll.user32.ShowWindow(hwnd, 6) + try: + hwnd = windll.user32.GetParent(self.base.winfo_id()) + windll.user32.ShowWindow(hwnd, 6) + except Exception as e: + print(e) + self.base.withdraw() else: self.base.withdraw() self.base.notifications.hide() diff --git a/src/biscuit/common/ui/icon.py b/src/biscuit/common/ui/icon.py index 0b38f1aa..4e3eeb01 100644 --- a/src/biscuit/common/ui/icon.py +++ b/src/biscuit/common/ui/icon.py @@ -62,12 +62,15 @@ def set_callback(self, event) -> None: def onclick(self, *args) -> None: try: - self.event(*args) - except: - self.event() - - self.v_onclick() - self.toggle_icon() + try: + self.event(*args) + except: + self.event() + + self.v_onclick() + self.toggle_icon() + except Exception as e: + print(e) def v_onclick(self) -> None: ... diff --git a/src/biscuit/editor/hover/hover.py b/src/biscuit/editor/hover/hover.py index 1e2f6322..d7f1b5f3 100644 --- a/src/biscuit/editor/hover/hover.py +++ b/src/biscuit/editor/hover/hover.py @@ -3,7 +3,9 @@ import tkinter as tk import typing -from biscuit.common.ui import Frame, Toplevel +from biscuit.common.ui import Frame +from biscuit.common.ui import Text as TextW +from biscuit.common.ui import Toplevel from .renderer import HoverRenderer @@ -14,26 +16,20 @@ from ..text import Text +def codeblock(text: str, language: str) -> str: + return f"```{language}\n{text}\n```\n\n---\n\n" + + class Hover(Toplevel): def __init__(self, master: App, bd: int = 2, *args, **kw) -> None: super().__init__(master, *args, **kw) self.overrideredirect(True) - self.maxsize(400, 200) + self.maxsize(600, 200) self.config(bg=self.base.theme.primary_background_highlight, bd=bd) container = Frame(self, bg=self.base.theme.border) container.pack(fill=tk.BOTH, expand=True) - self.label = tk.Label( - container, - padx=6, - font=self.base.settings.font, - anchor=tk.W, - justify=tk.LEFT, - **self.base.theme.editors.hover.text, - ) - self.label.pack(fill=tk.BOTH, expand=True) - self.renderer = HoverRenderer(container) self.renderer.pack(fill=tk.BOTH, expand=True) @@ -55,26 +51,29 @@ def update_position(self, pos: str, tab: Text): ) def show(self, tab: Text, response: HoverResponse) -> None: - if response.text: - if response.docs: - self.renderer.pack_forget() - self.label.config(text=response.text[1]) - self.label.pack(fill=tk.BOTH, expand=True) - else: - self.label.pack_forget() - - if response.docs: - self.renderer.render_markdown(response.docs) - self.renderer.pack(fill=tk.BOTH, pady=(1, 0) if response.text else 0) - else: - self.renderer.pack_forget() + if not response or not (response.text or response.docs): + self.hide() + return - self.update() - self.deiconify() + docs = "" try: - self.update_position(response.location, tab) - except: + if response.text[1].strip(): + docs += codeblock(response.text[1].strip(), tab.language_alias) + except IndexError: pass + if response.docs and response.docs.strip(): + docs += response.docs + + if not docs or not docs.strip(): + self.hide() + return + + self.renderer.render_markdown(docs) + self.update_idletasks() + self.deiconify() + self.update() + self.update_position(response.location, tab) + def hide(self, *_) -> None: self.withdraw() diff --git a/src/biscuit/editor/hover/renderer.py b/src/biscuit/editor/hover/renderer.py index 742cfbb5..796fc1b7 100644 --- a/src/biscuit/editor/hover/renderer.py +++ b/src/biscuit/editor/hover/renderer.py @@ -73,11 +73,11 @@ def __iter__(self): class HoverRenderer(HtmlFrame): def __init__(self, master: Hover, *args, **kwargs) -> None: - super().__init__( - master, messages_enabled=False, vertical_scrollbar=False, *args, **kwargs - ) + super().__init__(master, messages_enabled=False, *args, **kwargs) self.base = master.base - self.html.shrink(True) + + # NOTE: Causing app to crash + # self.html.shrink(True) self.style = BiscuitStyle(self.base.theme) @@ -102,12 +102,23 @@ def __init__(self, master: Hover, *args, **kwargs) -> None: pygments_css = self.formatter.get_style_defs(".highlight") self.css = f""" {pygments_css} + + HTML {{ + width: fit-content; + height: fit-content; + }} + CODE, PRE {{ font-family: {self.base.settings.font['family']}; font-size: {self.base.settings.font['size']}pt; background-color: {t.border}; padding: 2px; }} + + .highlight {{ + width: 100%; + }} + BODY {{ background-color: {t.secondary_background}; color: {t.secondary_foreground}; @@ -144,7 +155,8 @@ def __init__(self, master: Hover, *args, **kwargs) -> None: }} """ - def render_markdown(self, rawmd): - self.load_html(self.markdown(rawmd)) + def render_markdown(self, docs) -> None: + self.load_html(self.markdown(docs)) + print(self.markdown(docs)) self.add_css(self.css) self.update_idletasks() diff --git a/src/biscuit/language/NOTICE b/src/biscuit/language/NOTICE deleted file mode 100644 index a6ff67d5..00000000 --- a/src/biscuit/language/NOTICE +++ /dev/null @@ -1,2 +0,0 @@ -Parts of LSP client implementation is based on and are inspired by -Porcupine's LSP plugin https://github.com/Akuli/porcupine/ diff --git a/src/biscuit/language/utils.py b/src/biscuit/language/utils.py index 191e82e0..eb26cfae 100644 --- a/src/biscuit/language/utils.py +++ b/src/biscuit/language/utils.py @@ -32,6 +32,47 @@ import tarts as lsp +# Copyright (c) 2021-2024 tomlin7 +def to_document_symbol(infos: list[lsp.SymbolInformation]) -> list[lsp.DocumentSymbol]: + if not infos: + return [] + + infos.sort( + key=lambda x: ( + (x.location.range.start.line, x.location.range.start.character), + (-x.location.range.end.line, -x.location.range.end.character), + ) + ) + res: list[lsp.DocumentSymbol] = [] + parents: list[lsp.DocumentSymbol] = [] + + for info in infos: + element = lsp.DocumentSymbol( + name=info.name or "Error Symbol", + kind=info.kind, + children=[], + range=info.location.range, + selectionRange=info.location.range, + ) + + while True: + if not parents: + parents.append(element) + res.append(element) + break + parent = parents[-1] + if contains_range(parent.range, element.range) and not equals_range( + parent.range, element.range + ): + # TODO avoid adding the same named element twice to same parent + parent.children.append(element) + parents.append(element) + break + parents.pop() + + return res + + def get_completion_item_doc(item: lsp.CompletionItem) -> str: if not item.documentation: return item.label @@ -116,44 +157,3 @@ def equals_range(a: lsp.Range, b: lsp.Range) -> bool: and a.end.line == b.end.line and a.end.character == b.end.character ) - - -# Copyright (c) 2021-2024 tomlin7 -def to_document_symbol(infos: list[lsp.SymbolInformation]) -> list[lsp.DocumentSymbol]: - if not infos: - return [] - - infos.sort( - key=lambda x: ( - (x.location.range.start.line, x.location.range.start.character), - (-x.location.range.end.line, -x.location.range.end.character), - ) - ) - res: list[lsp.DocumentSymbol] = [] - parents: list[lsp.DocumentSymbol] = [] - - for info in infos: - element = lsp.DocumentSymbol( - name=info.name or "Error Symbol", - kind=info.kind, - children=[], - range=info.location.range, - selectionRange=info.location.range, - ) - - while True: - if not parents: - parents.append(element) - res.append(element) - break - parent = parents[-1] - if contains_range(parent.range, element.range) and not equals_range( - parent.range, element.range - ): - # TODO avoid adding the same named element twice to same parent - parent.children.append(element) - parents.append(element) - break - parents.pop() - - return res diff --git a/src/biscuit/views/debug/debug.py b/src/biscuit/views/debug/debug.py index 366fae51..2ac21645 100644 --- a/src/biscuit/views/debug/debug.py +++ b/src/biscuit/views/debug/debug.py @@ -104,7 +104,7 @@ def open_config_editor(self, *_): if self.base.active_directory else ".biscuit/launch.toml" ) - self.base.open_editor(path) + self.base.open_editor(str(path)) def refresh(self): if self.manager.config_loader.config_found or self.running: