forked from dhanoosu/TkTerm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtkterm.py
95 lines (67 loc) · 2.93 KB
/
tkterm.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import tkinter as tk
from tkinter import *
from tkinter import ttk
from tkinter import font
from tkinter.font import Font
import os
import sys
import json
# Add to system path
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from src.TerminalTab import TerminalTab
from src.Interpreter import Interpreter
from src.ExitDiaglogBox import ExitDiaglogBox
from src.Config import TkTermConfig
class Terminal(tk.Frame):
""" Terminal widget """
def __init__(self, parent, text=None, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.splashText = text
# Initialised all interpreter backends
Interpreter.init_backends()
########################################################################
# Load setting profile
########################################################################
self.TerminalConfig = TkTermConfig.get_default()
if "Cascadia Code SemiLight" in font.families():
self.TerminalConfig["fontfamily"] = "Cascadia Code SemiLight"
else:
self.TerminalConfig["fontfamily"] = "Consolas"
TkTermConfig.set_default(self.TerminalConfig)
# Load settings from file
if os.path.isfile(TkTermConfig.CONFIG_FILE):
with open(TkTermConfig.CONFIG_FILE, "r") as f:
try:
data = json.load(f)
for k in data.keys():
if k in self.TerminalConfig.keys():
self.TerminalConfig[k] = data[k]
except:
pass
TkTermConfig.set_config(self.TerminalConfig)
########################################################################
# Create terminal tabs using notebook
########################################################################
self.notebook = TerminalTab(self, self.splashText)
self.notebook.pack(expand=True, fill=BOTH)
def add_interpreter(self, *args, **kwargs):
""" Add a new interpreter and optionally set as default """
Interpreter.add_interpreter(*args, **kwargs)
def on_resize(self, event):
"""Auto scroll to bottom when resize event happens"""
first_visible_line = self.TerminalScreen.index("@0,0")
if self.scrollbar.get()[1] >= 1:
self.TerminalScreen.see(END)
# elif float(first_visible_line) > 1.0:
# self.TerminalScreen.see(float(first_visible_line)-1)
# self.statusText.set(self.TerminalScreen.winfo_height())
if __name__ == "__main__":
root = tk.Tk()
root.title("TkTerm - Terminal Emulator")
root.geometry("700x400")
terminal = Terminal(root)
terminal.pack(expand=True, fill=BOTH)
icon = PhotoImage(file="icon.png")
root.iconphoto(False, icon)
ExitDiaglogBox(root, icon)
root.mainloop()