From fc68d2cf2d6b161d8e3b9fc9daf6185d9197deba Mon Sep 17 00:00:00 2001 From: wakonig_k Date: Fri, 25 Jul 2025 22:14:56 +0200 Subject: [PATCH] feat(monaco): add insert, delete and lsp header --- bec_widgets/cli/client.py | 39 +++++++++++++++++ .../widgets/editors/monaco/monaco_widget.py | 43 +++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/bec_widgets/cli/client.py b/bec_widgets/cli/client.py index ec80d5d2..04ce00b1 100644 --- a/bec_widgets/cli/client.py +++ b/bec_widgets/cli/client.py @@ -2469,6 +2469,26 @@ class MonacoWidget(RPCBase): Get the current text from the Monaco editor. """ + @rpc_call + def insert_text(self, text: str, line: int | None = None, column: int | None = None) -> None: + """ + Insert text at the current cursor position or at a specified line and column. + + Args: + text (str): The text to insert. + line (int, optional): The line number (1-based) to insert the text at. Defaults to None. + column (int, optional): The column number (1-based) to insert the text at. Defaults to None. + """ + + @rpc_call + def delete_line(self, line: int | None = None) -> None: + """ + Delete a line in the Monaco editor. + + Args: + line (int, optional): The line number (1-based) to delete. If None, the current line will be deleted. + """ + @rpc_call def set_language(self, language: str) -> None: """ @@ -2551,6 +2571,25 @@ class MonacoWidget(RPCBase): enabled (bool): If True, Vim mode will be enabled; otherwise, it will be disabled. """ + @rpc_call + def set_lsp_header(self, header: str) -> None: + """ + Set the LSP (Language Server Protocol) header for the Monaco editor. + The header is used to provide context for language servers but is not displayed in the editor. + + Args: + header (str): The LSP header to set. + """ + + @rpc_call + def get_lsp_header(self) -> str: + """ + Get the current LSP header set in the Monaco editor. + + Returns: + str: The LSP header. + """ + class MotorMap(RPCBase): """Motor map widget for plotting motor positions in 2D including a trace of the last points.""" diff --git a/bec_widgets/widgets/editors/monaco/monaco_widget.py b/bec_widgets/widgets/editors/monaco/monaco_widget.py index 7c093c2c..07600530 100644 --- a/bec_widgets/widgets/editors/monaco/monaco_widget.py +++ b/bec_widgets/widgets/editors/monaco/monaco_widget.py @@ -19,6 +19,8 @@ class MonacoWidget(BECWidget, QWidget): USER_ACCESS = [ "set_text", "get_text", + "insert_text", + "delete_line", "set_language", "get_language", "set_theme", @@ -28,6 +30,8 @@ class MonacoWidget(BECWidget, QWidget): "current_cursor", "set_minimap_enabled", "set_vim_mode_enabled", + "set_lsp_header", + "get_lsp_header", ] def __init__(self, parent=None, config=None, client=None, gui_id=None, **kwargs): @@ -69,6 +73,26 @@ class MonacoWidget(BECWidget, QWidget): """ return self.editor.get_text() + def insert_text(self, text: str, line: int | None = None, column: int | None = None) -> None: + """ + Insert text at the current cursor position or at a specified line and column. + + Args: + text (str): The text to insert. + line (int, optional): The line number (1-based) to insert the text at. Defaults to None. + column (int, optional): The column number (1-based) to insert the text at. Defaults to None. + """ + self.editor.insert_text(text, line, column) + + def delete_line(self, line: int | None = None) -> None: + """ + Delete a line in the Monaco editor. + + Args: + line (int, optional): The line number (1-based) to delete. If None, the current line will be deleted. + """ + self.editor.delete_line(line) + def set_cursor( self, line: int, @@ -167,6 +191,25 @@ class MonacoWidget(BECWidget, QWidget): """ self.editor.set_vim_mode_enabled(enabled) + def set_lsp_header(self, header: str) -> None: + """ + Set the LSP (Language Server Protocol) header for the Monaco editor. + The header is used to provide context for language servers but is not displayed in the editor. + + Args: + header (str): The LSP header to set. + """ + self.editor.set_lsp_header(header) + + def get_lsp_header(self) -> str: + """ + Get the current LSP header set in the Monaco editor. + + Returns: + str: The LSP header. + """ + return self.editor.get_lsp_header() + if __name__ == "__main__": # pragma: no cover qapp = QApplication([])