45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
#chat_widget.py
|
|
"""
|
|
Handles the terminal widget
|
|
"""
|
|
|
|
import gi
|
|
gi.require_version('Gtk', '4.0')
|
|
gi.require_version('Vte', '3.91')
|
|
from gi.repository import Gtk, Vte, GLib, Pango, GLib, Gdk
|
|
|
|
class terminal(Vte.Terminal):
|
|
__gtype_name__ = 'AlpacaTerminal'
|
|
|
|
def __init__(self, script:list):
|
|
super().__init__(css_classes=["terminal"])
|
|
self.set_font(Pango.FontDescription.from_string("Monospace 12"))
|
|
self.set_clear_background(False)
|
|
pty = Vte.Pty.new_sync(Vte.PtyFlags.DEFAULT, None)
|
|
|
|
self.set_pty(pty)
|
|
|
|
pty.spawn_async(
|
|
GLib.get_current_dir(),
|
|
script,
|
|
[],
|
|
GLib.SpawnFlags.DEFAULT,
|
|
None,
|
|
None,
|
|
-1,
|
|
None,
|
|
None
|
|
)
|
|
|
|
key_controller = Gtk.EventControllerKey()
|
|
key_controller.connect("key-pressed", self.on_key_press)
|
|
self.add_controller(key_controller)
|
|
|
|
def on_key_press(self, controller, keyval, keycode, state):
|
|
ctrl = state & Gdk.ModifierType.CONTROL_MASK
|
|
shift = state & Gdk.ModifierType.SHIFT_MASK
|
|
if ctrl and keyval == Gdk.KEY_c:
|
|
self.copy_clipboard()
|
|
return True
|
|
return False
|