diff --git a/src/custom_widgets/message_widget.py b/src/custom_widgets/message_widget.py index 6f23a65..e5fe6fa 100644 --- a/src/custom_widgets/message_widget.py +++ b/src/custom_widgets/message_widget.py @@ -108,9 +108,9 @@ class code_block(Gtk.Box): copy_button = Gtk.Button(icon_name="edit-copy-symbolic", css_classes=["flat", "circular"], tooltip_text=_("Copy Message")) copy_button.connect("clicked", lambda *_: self.on_copy()) title_box.append(copy_button) - if language_name.lower() == 'bash': + if language_name and language_name.lower() in ['bash', 'python3']: run_button = Gtk.Button(icon_name="execute-from-symbolic", css_classes=["flat", "circular"], tooltip_text=_("Run Script")) - run_button.connect("clicked", lambda *_: self.run_script()) + run_button.connect("clicked", lambda *_: self.run_script(language_name)) title_box.append(run_button) self.append(title_box) self.append(Gtk.Separator()) @@ -126,11 +126,11 @@ class code_block(Gtk.Box): clipboard.set(text) window.show_toast(_("Code copied to the clipboard"), window.main_overlay) - def run_script(self): + def run_script(self, language_name): logger.debug("Running script") start = self.buffer.get_start_iter() end = self.buffer.get_end_iter() - dialogs.run_script(window, self.buffer.get_text(start, end, False)) + dialogs.run_script(window, self.buffer.get_text(start, end, False), language_name) class attachment(Gtk.Button): __gtype_name__ = 'AlpacaAttachment' diff --git a/src/dialogs.py b/src/dialogs.py index 34b4f0d..cf742f1 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -419,9 +419,11 @@ def attach_website(self, url): # Run Script -def run_script_response(self, dialog, task, script): +def run_script_response(self, dialog, task, script, language_name): if dialog.choose_finish(task) == "accept": logger.info('Running: \n{}'.format(script)) + if language_name == 'python3': + script = 'echo "{}" | python3'.format(script.replace('"', '\\"')) script += '; read -p "\n(Alpaca) {}"'.format(_('Press Enter to close...')) using_flatpak = shutil.which('flatpak-spawn') @@ -460,7 +462,7 @@ def run_script_response(self, dialog, task, script): except Exception as e: logger.error(f'Error running script on {terminal_to_use}: {e}') -def run_script(self, script:str): +def run_script(self, script:str, language_name:str): dialog = Adw.AlertDialog( heading=_("Run Script"), body=_("Make sure you understand what this script does before running it, Alpaca is not responsible for any damages to your device or data"), @@ -473,5 +475,5 @@ def run_script(self, script:str): dialog.choose( parent = self, cancellable = None, - callback = lambda dialog, task, script=script: run_script_response(self, dialog, task, script) + callback = lambda dialog, task, script=script, language_name=language_name: run_script_response(self, dialog, task, script, language_name) )