From 92dc2eb5fdf59bc7440f6dc4ecb6b117b634ac53 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 03:40:21 +0200 Subject: [PATCH 01/18] selection, and copy to clipboard --- termqt/colors.py | 2 +- termqt/terminal_buffer.py | 50 ++++++++++++++++++++++- termqt/terminal_widget.py | 86 +++++++++++++++++++++++++++++++++------ 3 files changed, 123 insertions(+), 15 deletions(-) diff --git a/termqt/colors.py b/termqt/colors.py index e873be6..ddf5315 100644 --- a/termqt/colors.py +++ b/termqt/colors.py @@ -1,4 +1,4 @@ -from Qt.QtGui import QColor +from PyQt5.QtGui import QColor # This file stores all xterm-256 colors. # See https://jonasjacek.github.io/colors/ diff --git a/termqt/terminal_buffer.py b/termqt/terminal_buffer.py index 9f5b051..3550099 100755 --- a/termqt/terminal_buffer.py +++ b/termqt/terminal_buffer.py @@ -4,8 +4,8 @@ from functools import partial from collections import deque -from Qt.QtGui import QColor -from Qt.QtCore import Qt, QMutex +from PyQt5.QtGui import QColor +from PyQt5.QtCore import Qt, QMutex from .colors import colors8, colors16, colors256 @@ -637,6 +637,10 @@ def __init__(self, self._alt_buffer_display_offset = None self._alt_cursor_position = Position(0, 0) + # selection + self._selection_start = None + self._selection_end = None + # scroll bar self._postpone_scroll_update = False self._scroll_update_pending = False @@ -657,6 +661,48 @@ def __init__(self, self.create_buffer(row_len, col_len) + + # Add methods to manage selection state + def set_selection_start(self, position): + self._selection_start = position + + def set_selection_end(self, position): + self._selection_end = position + + def reset_selection(self): + self._selection_start = None + self._selection_end = None + + def get_selection(self): + # Ensure the selection is ordered correctly + if self._selection_start and self._selection_end: + start = min(self._selection_start, self._selection_end) + end = max(self._selection_start, self._selection_end) + return start, end + return None, None + + def _get_selected_text(self): + start, end = self.get_selection() + if start and end: + selected_text = "" + for row in range(start.y, end.y + 1): + if 0 <= row < len(self._buffer): + line = self._buffer[row] + line_text = "" + for col in range(len(line)): + if start.y == end.y: + if start.x <= col <= end.x: + line_text += line[col].char if line[col] else ' ' + elif row == start.y and col >= start.x: + line_text += line[col].char if line[col] else ' ' + elif row == end.y and col <= end.x: + line_text += line[col].char if line[col] else ' ' + elif start.y < row < end.y: + line_text += line[col].char if line[col] else ' ' + selected_text += line_text + '\n' + return selected_text.strip('\n') + return "" + def _register_escape_callbacks(self): ep = self.escape_processor ep.erase_display_cb = self.erase_display diff --git a/termqt/terminal_widget.py b/termqt/terminal_widget.py index 387c3bd..f7d8813 100644 --- a/termqt/terminal_widget.py +++ b/termqt/terminal_widget.py @@ -2,12 +2,14 @@ import math from enum import Enum -from Qt.QtWidgets import QWidget, QScrollBar -from Qt.QtGui import (QPainter, QColor, QPalette, QFontDatabase, +from PyQt5.QtWidgets import QWidget, QScrollBar, QMenu, QAction, QApplication +from PyQt5.QtGui import (QPainter, QColor, QPalette, QFontDatabase, QPen, QFont, QFontInfo, QFontMetrics, QPixmap) -from Qt.QtCore import Qt, QTimer, QMutex, Signal +from PyQt5.QtCore import Qt, QTimer, QMutex, pyqtSignal -from .terminal_buffer import TerminalBuffer, DEFAULT_BG_COLOR, \ +import .colors + +from .terminal_buffer import Position, TerminalBuffer, DEFAULT_BG_COLOR, \ DEFAULT_FG_COLOR, ControlChar, Placeholder @@ -26,20 +28,20 @@ class Terminal(TerminalBuffer, QWidget): # thread, Qt will crash immediately. Just don't do that. # signal for triggering a on-canvas buffer repaint - buffer_repaint_sig = Signal() + buffer_repaint_sig = pyqtSignal() # signal for triggering a on-canvas cursor repaint - cursor_repaint_sig = Signal() + cursor_repaint_sig = pyqtSignal() # signal for triggering a repaint for both the canvas and the widget - total_repaint_sig = Signal() + total_repaint_sig = pyqtSignal() # internal signal for triggering stdout routine for buffering and # painting. Note: Use stdout() method. - _stdout_sig = Signal(bytes) + _stdout_sig = pyqtSignal(bytes) # update scroll bar - update_scroll_sig = Signal() + update_scroll_sig = pyqtSignal() def __init__(self, width, @@ -115,6 +117,46 @@ def __init__(self, self._stdout_sig.connect(self._stdout) self.resize(width, height) + def mousePressEvent(self, event): + if event.button() == Qt.LeftButton: + pos = self._map_pixel_to_cell(event.pos()) + self.set_selection_start(pos) + self.set_selection_end(pos) + self._paint_buffer() + self._restore_cursor_state() + + def mouseMoveEvent(self, event): + if event.buttons() & Qt.LeftButton: + pos = self._map_pixel_to_cell(event.pos()) + self.set_selection_end(pos) + self._paint_buffer() + self._restore_cursor_state() + + def mouseReleaseEvent(self, event): + if event.button() == Qt.RightButton: + self._show_context_menu(event.pos()) + + if event.buttons() & Qt.LeftButton: + self._paint_buffer() + self._restore_cursor_state() + + def _show_context_menu(self, position): + menu = QMenu(self) + copy_action = QAction("Copy", self) + copy_action.triggered.connect(self._copy_selection) + menu.addAction(copy_action) + menu.exec_(self.mapToGlobal(position)) + + def _copy_selection(self): + selected_text = self._get_selected_text() + clipboard = QApplication.clipboard() + clipboard.setText(selected_text) + + def _map_pixel_to_cell(self, pos): + col = int((pos.x() - self._padding / 2) / self.char_width) + row = int((pos.y() - self._padding / 2) / self.line_height) + return Position(col, row + self._buffer_display_offset) + def set_bg(self, color: QColor): TerminalBuffer.set_bg(self, color) @@ -210,23 +252,28 @@ def _paint_buffer(self): if real_ln < 0 or real_ln >= len(self._buffer): break - row = self._buffer[ln + offset] + row = self._buffer[real_ln] ht += lh for cn, c in enumerate(row): if c: + is_selected = self._is_selected(cn, real_ln) + alt_bgcolor = None + if is_selected: + alt_bgcolor = colors.colors8[36] + if c.placeholder == Placeholder.NON: ft.setBold(c.bold) ft.setUnderline(c.underline) qp.setFont(ft) if not c.reverse: qp.fillRect(cn*cw, int(ht - 0.8*ch), cw*c.char_width, lh, - c.bg_color) + alt_bgcolor or c.bg_color) qp.setPen(c.color) qp.drawText(cn*cw, ht, c.char) else: qp.fillRect(cn*cw, int(ht - 0.8*ch), cw*c.char_width, lh, - c.color) + alt_bgcolor or c.color) qp.setPen(c.bg_color) qp.drawText(cn*cw, ht, c.char) else: @@ -239,6 +286,21 @@ def _paint_buffer(self): self._painter_lock.unlock() + def _is_selected(self, col, row): + if not self._selection_start or not self._selection_end: + return False + start_col, start_row = self._selection_start + end_col, end_row = self._selection_end + if start_row <= row <= end_row: + if row == start_row and row == end_row: + return start_col <= col <= end_col + elif row == start_row: + return col >= start_col + elif row == end_row: + return col <= end_col + return True + return False + def _paint_cursor(self): if not self._buffer: return From da8119f74e6900c9216b666266775814159873e5 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 03:54:43 +0200 Subject: [PATCH 02/18] selection, and copy to clipboard --- termqt/terminal_widget.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/termqt/terminal_widget.py b/termqt/terminal_widget.py index f7d8813..35ed58c 100644 --- a/termqt/terminal_widget.py +++ b/termqt/terminal_widget.py @@ -7,7 +7,7 @@ QPen, QFont, QFontInfo, QFontMetrics, QPixmap) from PyQt5.QtCore import Qt, QTimer, QMutex, pyqtSignal -import .colors +from . import colors from .terminal_buffer import Position, TerminalBuffer, DEFAULT_BG_COLOR, \ DEFAULT_FG_COLOR, ControlChar, Placeholder From 4cc6e924af70c5b8f2a4d8e5651f96add25d9b0e Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 04:35:30 +0200 Subject: [PATCH 03/18] add copy all --- termqt/terminal_buffer.py | 7 +++++++ termqt/terminal_widget.py | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/termqt/terminal_buffer.py b/termqt/terminal_buffer.py index 3550099..a27e8fd 100755 --- a/termqt/terminal_buffer.py +++ b/termqt/terminal_buffer.py @@ -703,6 +703,13 @@ def _get_selected_text(self): return selected_text.strip('\n') return "" + def _get_all_text(self): + all_text = "" + for row in self._buffer: + line_text = ''.join(c.char if c else ' ' for c in row) + all_text += line_text + '\n' + return all_text.strip('\n') + def _register_escape_callbacks(self): ep = self.escape_processor ep.erase_display_cb = self.erase_display diff --git a/termqt/terminal_widget.py b/termqt/terminal_widget.py index 35ed58c..aa83ca3 100644 --- a/termqt/terminal_widget.py +++ b/termqt/terminal_widget.py @@ -142,11 +142,22 @@ def mouseReleaseEvent(self, event): def _show_context_menu(self, position): menu = QMenu(self) + copy_action = QAction("Copy", self) copy_action.triggered.connect(self._copy_selection) menu.addAction(copy_action) + + copy_all_action = QAction("Copy All", self) + copy_all_action.triggered.connect(self._copy_all) + menu.addAction(copy_all_action) + menu.exec_(self.mapToGlobal(position)) + def _copy_all(self): + all_text = self._get_all_text() + clipboard = QApplication.clipboard() + clipboard.setText(all_text) + def _copy_selection(self): selected_text = self._get_selected_text() clipboard = QApplication.clipboard() From 1aa1fb7005c8912f544112eda0bacd7cc7319ae6 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 04:47:04 +0200 Subject: [PATCH 04/18] rstrip when copy --- termqt/terminal_buffer.py | 34 ++++++++++++++++++++++++++++++++++ termqt/terminal_widget.py | 13 +++++++------ 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/termqt/terminal_buffer.py b/termqt/terminal_buffer.py index a27e8fd..e6add26 100755 --- a/termqt/terminal_buffer.py +++ b/termqt/terminal_buffer.py @@ -703,6 +703,28 @@ def _get_selected_text(self): return selected_text.strip('\n') return "" + def _get_selected_text_rstrip(self): + start, end = self.get_selection() + if start and end: + selected_text = "" + for row in range(start.y, end.y + 1): + if 0 <= row < len(self._buffer): + line = self._buffer[row] + line_text = "" + for col in range(len(line)): + if start.y == end.y: + if start.x <= col <= end.x: + line_text += line[col].char if line[col] else ' ' + elif row == start.y and col >= start.x: + line_text += line[col].char if line[col] else ' ' + elif row == end.y and col <= end.x: + line_text += line[col].char if line[col] else ' ' + elif start.y < row < end.y: + line_text += line[col].char if line[col] else ' ' + selected_text += line_text.rstrip() + '\n' + return selected_text.strip('\n') + return "" + def _get_all_text(self): all_text = "" for row in self._buffer: @@ -710,6 +732,18 @@ def _get_all_text(self): all_text += line_text + '\n' return all_text.strip('\n') + def _get_all_text_rstrip(self): + all_text = [] + for row in self._buffer: + line_text = ''.join(c.char if c else ' ' for c in row).rstrip() + all_text.append(line_text) + + # Remove empty lines at the end of the buffer + while all_text and not all_text[-1]: + all_text.pop() + + return '\n'.join(all_text) + def _register_escape_callbacks(self): ep = self.escape_processor ep.erase_display_cb = self.erase_display diff --git a/termqt/terminal_widget.py b/termqt/terminal_widget.py index aa83ca3..d032c5e 100644 --- a/termqt/terminal_widget.py +++ b/termqt/terminal_widget.py @@ -4,7 +4,7 @@ from PyQt5.QtWidgets import QWidget, QScrollBar, QMenu, QAction, QApplication from PyQt5.QtGui import (QPainter, QColor, QPalette, QFontDatabase, - QPen, QFont, QFontInfo, QFontMetrics, QPixmap) + QPen, QFont, QFontInfo, QFontMetrics, QPixmap) from PyQt5.QtCore import Qt, QTimer, QMutex, pyqtSignal from . import colors @@ -154,12 +154,12 @@ def _show_context_menu(self, position): menu.exec_(self.mapToGlobal(position)) def _copy_all(self): - all_text = self._get_all_text() + all_text = self._get_all_text_rstrip() clipboard = QApplication.clipboard() clipboard.setText(all_text) def _copy_selection(self): - selected_text = self._get_selected_text() + selected_text = self._get_selected_text_rstrip() clipboard = QApplication.clipboard() clipboard.setText(selected_text) @@ -320,10 +320,10 @@ def _paint_cursor(self): ind_x = self._cursor_position.x ind_y = self._cursor_position.y # if cursor is at the right edge of screen, display half of it - x = int((ind_x if ind_x < self.row_len else (self.row_len - 0.5)) \ + x = int((ind_x if ind_x < self.row_len else (self.row_len - 0.5)) * self.char_width) - y = int((ind_y - self._buffer_display_offset) \ - * self.line_height + (self.line_height - self.char_height) \ + y = int((ind_y - self._buffer_display_offset) + * self.line_height + (self.line_height - self.char_height) + 0.2 * self.line_height) cw = self.char_width @@ -593,6 +593,7 @@ def keyPressEvent(self, event): def showEvent(self, event): super().showEvent(event) + def resize(*args): self.resize(self.size().width(), self.size().height()) QTimer.singleShot(0, resize) From 0bcaa9b23cec32656819d4e3052a749d47209cbf Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 05:13:39 +0200 Subject: [PATCH 05/18] tabs example --- example2.py | 93 +++++++++++++++++++++++++++++++++++++++ screenshots/example2.png | Bin 0 -> 84034 bytes 2 files changed, 93 insertions(+) create mode 100644 example2.py create mode 100644 screenshots/example2.png diff --git a/example2.py b/example2.py new file mode 100644 index 0000000..f1ea29f --- /dev/null +++ b/example2.py @@ -0,0 +1,93 @@ +import sys +import logging +import platform +from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTabWidget, QVBoxLayout, QPushButton, QScrollBar +from PyQt5.QtCore import Qt, QCoreApplication + +from termqt.termqt import Terminal +from termqt.termqt.terminal_io_windows import TerminalWinptyIO + + +class TerminalTabWidget(QWidget): + def __init__(self): + super().__init__() + self.layout = QVBoxLayout(self) + + self.tabs = QTabWidget() + self.tabs.setTabsClosable(True) + self.tabs.tabCloseRequested.connect(self.closeTab) + self.layout.addWidget(self.tabs) + + self.addButton = QPushButton('New Terminal') + self.addButton.clicked.connect(self.addTerminalTab_button) + self.layout.addWidget(self.addButton) + + def addTerminalTab_button(self): + self.addTerminalTab('cmd', 'cmd') + + def addTerminalTab(self, cmd, title=None): + terminal, scroll, terminal_io = self.createTerminal(cmd) + tab = QWidget() + layout = QHBoxLayout(tab) + layout.addWidget(terminal) + layout.addWidget(scroll) + layout.setSpacing(0) + tab.setLayout(layout) + + index = self.tabs.addTab(tab, title or "Terminal") + self.tabs.setCurrentIndex(index) + + # Start the terminal IO + terminal_io.spawn() + + def closeTab(self, index): + if self.tabs.count() > index: + widget = self.tabs.widget(index) + terminal_io = widget.findChild(TerminalWinptyIO) + if terminal_io and terminal_io.is_alive(): + terminal_io.terminate() + widget.deleteLater() + self.tabs.removeTab(index) + + def createTerminal(self, cmd): + terminal = Terminal( + 400, 300, # min size + font_size=7) + terminal.set_font() + terminal.maximum_line_history = 2000 + scroll = QScrollBar(Qt.Vertical, terminal) + terminal.connect_scroll_bar(scroll) + + # Terminal IO setup + if platform.system() == "Windows": + terminal_io = TerminalWinptyIO( + terminal.row_len, + terminal.col_len, + cmd + ) + else: + # Add appropriate handling for non-Windows systems + # bin = "/bin/bash" + # from termqt.termqt import TerminalPOSIXExecIO + # terminal_io = TerminalPOSIXExecIO( + # terminal.row_len, + # terminal.col_len, + # bin, + # logger=logger + # ) + pass + + terminal_io.stdout_callback = terminal.stdout + terminal.stdin_callback = terminal_io.write + terminal.resize_callback = terminal_io.resize + + return terminal, scroll, terminal_io + + +if __name__ == "__main__": + QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) + app = QApplication([]) + main_window = TerminalTabWidget() + main_window.setWindowTitle("termqt on {}".format(platform.system())) + main_window.show() + sys.exit(app.exec()) diff --git a/screenshots/example2.png b/screenshots/example2.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d6c2307a1fbfe067c23093676c232bc2ca12a8 GIT binary patch literal 84034 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 literal 0 HcmV?d00001 From a1e1c552bb7b7f3640703591398a51c9beab40d2 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 05:26:30 +0200 Subject: [PATCH 06/18] allow change selection bg color --- termqt/terminal_widget.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/termqt/terminal_widget.py b/termqt/terminal_widget.py index d032c5e..970b048 100644 --- a/termqt/terminal_widget.py +++ b/termqt/terminal_widget.py @@ -7,11 +7,11 @@ QPen, QFont, QFontInfo, QFontMetrics, QPixmap) from PyQt5.QtCore import Qt, QTimer, QMutex, pyqtSignal -from . import colors - from .terminal_buffer import Position, TerminalBuffer, DEFAULT_BG_COLOR, \ DEFAULT_FG_COLOR, ControlChar, Placeholder +SELECTION_BG_COLOR = Qt.cyan + class CursorState(Enum): ON = 1 @@ -86,6 +86,7 @@ def __init__(self, self.set_bg(DEFAULT_BG_COLOR) self.set_fg(DEFAULT_FG_COLOR) + self.selection_color = SELECTION_BG_COLOR self.metrics = None self.set_font(font) self.setAutoFillBackground(True) @@ -271,7 +272,7 @@ def _paint_buffer(self): is_selected = self._is_selected(cn, real_ln) alt_bgcolor = None if is_selected: - alt_bgcolor = colors.colors8[36] + alt_bgcolor = self.selection_color if c.placeholder == Placeholder.NON: ft.setBold(c.bold) From f6bb467e21ccdbd67f634276ed2d432a1253112f Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 05:28:51 +0200 Subject: [PATCH 07/18] add screenshot example2 --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8a76056..c3e0b94 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ it can run IPython and perhaps more usual applications. Screenshot +Screenshot + It is worth noting that is project is still work-in-progress and more necessary features shall be added in coming weeks. From 9d437ed301ce0c325d240d318a07dd847470a0a0 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 05:37:56 +0200 Subject: [PATCH 08/18] add linux for the example2 --- example2.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/example2.py b/example2.py index f1ea29f..8c1b563 100644 --- a/example2.py +++ b/example2.py @@ -6,6 +6,7 @@ from termqt.termqt import Terminal from termqt.termqt.terminal_io_windows import TerminalWinptyIO +from termqt.termqt.terminal_io_posix import TerminalPOSIXExecIO class TerminalTabWidget(QWidget): @@ -23,7 +24,10 @@ def __init__(self): self.layout.addWidget(self.addButton) def addTerminalTab_button(self): - self.addTerminalTab('cmd', 'cmd') + if platform.system() == "Windows": + self.addTerminalTab('cmd', 'bash') + else: + self.addTerminalTab('/bin/bash', 'bash') def addTerminalTab(self, cmd, title=None): terminal, scroll, terminal_io = self.createTerminal(cmd) @@ -66,16 +70,11 @@ def createTerminal(self, cmd): cmd ) else: - # Add appropriate handling for non-Windows systems - # bin = "/bin/bash" - # from termqt.termqt import TerminalPOSIXExecIO - # terminal_io = TerminalPOSIXExecIO( - # terminal.row_len, - # terminal.col_len, - # bin, - # logger=logger - # ) - pass + terminal_io = TerminalPOSIXExecIO( + terminal.row_len, + terminal.col_len, + cmd + ) terminal_io.stdout_callback = terminal.stdout terminal.stdin_callback = terminal_io.write From 28d9becbb81573a2cdeffcbe099718266c004e5c Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 05:53:05 +0200 Subject: [PATCH 09/18] add parent for the widget in example2 --- example2.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/example2.py b/example2.py index 8c1b563..aca4924 100644 --- a/example2.py +++ b/example2.py @@ -1,5 +1,4 @@ import sys -import logging import platform from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTabWidget, QVBoxLayout, QPushButton, QScrollBar from PyQt5.QtCore import Qt, QCoreApplication @@ -10,8 +9,8 @@ class TerminalTabWidget(QWidget): - def __init__(self): - super().__init__() + def __init__(self, parent=None): + super().__init__(parent) self.layout = QVBoxLayout(self) self.tabs = QTabWidget() From b6fb14517221c5020612a94b0fab44e2a256300f Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 06:00:57 +0200 Subject: [PATCH 10/18] example 2 cmd caption --- example2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example2.py b/example2.py index aca4924..9ff769d 100644 --- a/example2.py +++ b/example2.py @@ -24,7 +24,7 @@ def __init__(self, parent=None): def addTerminalTab_button(self): if platform.system() == "Windows": - self.addTerminalTab('cmd', 'bash') + self.addTerminalTab('cmd', 'cmd') else: self.addTerminalTab('/bin/bash', 'bash') From a2e5ff635a3e744954f139d7d220a7461fe8a440 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 13:28:29 +0200 Subject: [PATCH 11/18] optimize selection --- termqt/terminal_buffer.py | 19 +++++--- termqt/terminal_widget.py | 92 ++++++++++++++++++++++++++++----------- 2 files changed, 80 insertions(+), 31 deletions(-) diff --git a/termqt/terminal_buffer.py b/termqt/terminal_buffer.py index e6add26..c0b6225 100755 --- a/termqt/terminal_buffer.py +++ b/termqt/terminal_buffer.py @@ -661,13 +661,22 @@ def __init__(self, self.create_buffer(row_len, col_len) - # Add methods to manage selection state - def set_selection_start(self, position): - self._selection_start = position - def set_selection_end(self, position): - self._selection_end = position + def set_selection_start(self, start_position): + self._selection_start = start_position + self._selection_end = start_position + + def set_selection_end(self, end_position): + self._selection_end = end_position + + def set_selection_finish(self, end_position): + self.set_selection_end(end_position) + + start_col, start_row = self._selection_start + end_col, end_row = self._selection_end + if (start_row, start_col) == (end_row, end_col): + self._selection_start = self._selection_end = None def reset_selection(self): self._selection_start = None diff --git a/termqt/terminal_widget.py b/termqt/terminal_widget.py index 970b048..e92014a 100644 --- a/termqt/terminal_widget.py +++ b/termqt/terminal_widget.py @@ -123,6 +123,7 @@ def mousePressEvent(self, event): pos = self._map_pixel_to_cell(event.pos()) self.set_selection_start(pos) self.set_selection_end(pos) + self._paint_buffer() self._restore_cursor_state() @@ -130,6 +131,7 @@ def mouseMoveEvent(self, event): if event.buttons() & Qt.LeftButton: pos = self._map_pixel_to_cell(event.pos()) self.set_selection_end(pos) + self._paint_buffer() self._restore_cursor_state() @@ -137,7 +139,10 @@ def mouseReleaseEvent(self, event): if event.button() == Qt.RightButton: self._show_context_menu(event.pos()) - if event.buttons() & Qt.LeftButton: + if self._selection_start is not None: + pos = self._map_pixel_to_cell(event.pos()) + self.set_selection_finish(pos) + self._paint_buffer() self._restore_cursor_state() @@ -259,43 +264,78 @@ def _paint_buffer(self): qp.fillRect(self.rect(), DEFAULT_BG_COLOR) + # Calculate selection bounds + if self._selection_start and self._selection_end: + start_col, start_row = self._selection_start + end_col, end_row = self._selection_end + if (start_row, start_col) > (end_row, end_col): + start_row, end_row = end_row, start_row + start_col, end_col = end_col, start_col + else: + start_col = start_row = end_col = end_row = None + for ln in range(self.col_len): real_ln = ln + offset if real_ln < 0 or real_ln >= len(self._buffer): break row = self._buffer[real_ln] - ht += lh - for cn, c in enumerate(row): - if c: - is_selected = self._is_selected(cn, real_ln) - alt_bgcolor = None - if is_selected: - alt_bgcolor = self.selection_color - if c.placeholder == Placeholder.NON: + if start_row is not None and start_row <= real_ln <= end_row: + if real_ln == start_row or real_ln == end_row: + # Process mixed lines + for cn, c in enumerate(row): + if c: + is_selected = False + if real_ln == start_row and real_ln == end_row: + # Single character selection + is_selected = cn == start_col and cn == end_col + elif real_ln == start_row: + is_selected = cn >= start_col + elif real_ln == end_row: + is_selected = cn <= end_col + bgcolor = self.selection_color if is_selected else c.bg_color + # Start of character rendering + ft.setBold(c.bold) + ft.setUnderline(c.underline) + qp.setFont(ft) + qp.fillRect(cn*cw, int(ht - 0.8*ch), + cw*c.char_width, lh, bgcolor) + qp.setPen(c.color if not c.reverse else c.bg_color) + qp.drawText(cn*cw, ht, c.char) + # End of character rendering + else: + # Process fully selected lines + bgcolor = self.selection_color + for cn, c in enumerate(row): + if c: + # Start of character rendering + ft.setBold(c.bold) + ft.setUnderline(c.underline) + qp.setFont(ft) + qp.fillRect(cn*cw, int(ht - 0.8*ch), + cw*c.char_width, lh, bgcolor) + qp.setPen(c.color if not c.reverse else c.bg_color) + qp.drawText(cn*cw, ht, c.char) + # End of character rendering + else: + # Process non-selected lines + for cn, c in enumerate(row): + if c: + bgcolor = c.bg_color + + # Start of character rendering ft.setBold(c.bold) ft.setUnderline(c.underline) qp.setFont(ft) - if not c.reverse: - qp.fillRect(cn*cw, int(ht - 0.8*ch), cw*c.char_width, lh, - alt_bgcolor or c.bg_color) - qp.setPen(c.color) - qp.drawText(cn*cw, ht, c.char) - else: - qp.fillRect(cn*cw, int(ht - 0.8*ch), cw*c.char_width, lh, - alt_bgcolor or c.color) - qp.setPen(c.bg_color) - qp.drawText(cn*cw, ht, c.char) - else: - qp.setPen(fg_color) - ft.setBold(False) - ft.setUnderline(False) - qp.setFont(ft) - qp.drawText(ht, cn*cw, " ") - qp.end() + qp.fillRect(cn*cw, int(ht - 0.8*ch), + cw*c.char_width, lh, bgcolor) + qp.setPen(c.color if not c.reverse else c.bg_color) + qp.drawText(cn*cw, ht, c.char) + # End of character rendering + qp.end() self._painter_lock.unlock() def _is_selected(self, col, row): From 528b7caf03b50f21fc6acb812afa4595b9c3bf0a Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 13:54:23 +0200 Subject: [PATCH 12/18] fix line selection --- termqt/terminal_widget.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/termqt/terminal_widget.py b/termqt/terminal_widget.py index e92014a..86b43bb 100644 --- a/termqt/terminal_widget.py +++ b/termqt/terminal_widget.py @@ -287,15 +287,19 @@ def _paint_buffer(self): # Process mixed lines for cn, c in enumerate(row): if c: + is_selected = False if real_ln == start_row and real_ln == end_row: - # Single character selection - is_selected = cn == start_col and cn == end_col + is_selected = start_col <= cn <= end_col elif real_ln == start_row: is_selected = cn >= start_col elif real_ln == end_row: is_selected = cn <= end_col + else: + is_selected = True + bgcolor = self.selection_color if is_selected else c.bg_color + # Start of character rendering ft.setBold(c.bold) ft.setUnderline(c.underline) @@ -310,6 +314,7 @@ def _paint_buffer(self): bgcolor = self.selection_color for cn, c in enumerate(row): if c: + # Start of character rendering ft.setBold(c.bold) ft.setUnderline(c.underline) From cdb83e05b054f038d0ca9435be674388c705836b Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 13:56:47 +0200 Subject: [PATCH 13/18] error when stream closed ubruptly --- termqt/terminal_io_windows.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/termqt/terminal_io_windows.py b/termqt/terminal_io_windows.py index 8d28c7e..e0cc83f 100644 --- a/termqt/terminal_io_windows.py +++ b/termqt/terminal_io_windows.py @@ -82,6 +82,8 @@ def _read_loop(self): self.stdout_callback(bytes(buf, 'utf-8')) else: self.stdout_callback(buf) + except EOFError: + pass finally: self.logger.info("Spawned process has been killed") if self.running: From 8800568e644ca3a324f2a79083a53b19d052ae86 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 21:34:01 +0200 Subject: [PATCH 14/18] paste menu --- termqt/terminal_widget.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/termqt/terminal_widget.py b/termqt/terminal_widget.py index 86b43bb..e3dbc16 100644 --- a/termqt/terminal_widget.py +++ b/termqt/terminal_widget.py @@ -157,8 +157,21 @@ def _show_context_menu(self, position): copy_all_action.triggered.connect(self._copy_all) menu.addAction(copy_all_action) + paste_action = QAction("Paste", self) + paste_action.triggered.connect(self._paste_from_clipboard) + menu.addAction(paste_action) + menu.exec_(self.mapToGlobal(position)) + def _paste_from_clipboard(self): + clipboard = QApplication.clipboard() + text = clipboard.text() + if text: + # Or any other method you use to handle input + self.input(text.encode('utf-8')) + return True + return False + def _copy_all(self): all_text = self._get_all_text_rstrip() clipboard = QApplication.clipboard() From 06e54dd7084ac3417565adc3cc571afeb6f07f68 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Thu, 7 Dec 2023 21:37:04 +0200 Subject: [PATCH 15/18] add shortcut keys --- termqt/terminal_widget.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/termqt/terminal_widget.py b/termqt/terminal_widget.py index e3dbc16..971798b 100644 --- a/termqt/terminal_widget.py +++ b/termqt/terminal_widget.py @@ -87,6 +87,7 @@ def __init__(self, self.set_bg(DEFAULT_BG_COLOR) self.set_fg(DEFAULT_FG_COLOR) self.selection_color = SELECTION_BG_COLOR + self.enable_selection_keys = True self.metrics = None self.set_font(font) self.setAutoFillBackground(True) @@ -586,12 +587,30 @@ def keyPressEvent(self, event): elif key == Qt.Key_Delete or key == Qt.Key_Backspace: self.input(ControlChar.BS.value) elif key == Qt.Key_Escape: - self.input(ControlChar.ESC.value) + + # Deselect with ESC if there is a selection + if self.enable_selection_keys and self._selection_start is not None: + self.reset_selection() + else: + self.input(ControlChar.ESC.value) else: break # avoid the execution of 'return' return + elif modifiers == Qt.ControlModifier or modifiers == Qt.MetaModifier: - if key == Qt.Key_A: + + # Paste with Ctrl+V (or Command+V on macOS) + pasted = False + if self.enable_selection_keys and event.key() == Qt.Key_V: + pasted = self._paste_from_clipboard() + if pasted: + pass + + # Copy with Ctrl+C (or Command+C on macOS) + elif self.enable_selection_keys and event.key() == Qt.Key_C and self._selection_start is not None: + self._copy_selection() + + elif key == Qt.Key_A: self.input(ControlChar.SOH.value) elif key == Qt.Key_B: self.input(ControlChar.STX.value) From c49909f9fe50b2c55c7e541df2400494fcb1f7f5 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Sat, 9 Dec 2023 18:23:07 +0200 Subject: [PATCH 16/18] Delete example2.py --- example2.py | 91 ----------------------------------------------------- 1 file changed, 91 deletions(-) delete mode 100644 example2.py diff --git a/example2.py b/example2.py deleted file mode 100644 index 9ff769d..0000000 --- a/example2.py +++ /dev/null @@ -1,91 +0,0 @@ -import sys -import platform -from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTabWidget, QVBoxLayout, QPushButton, QScrollBar -from PyQt5.QtCore import Qt, QCoreApplication - -from termqt.termqt import Terminal -from termqt.termqt.terminal_io_windows import TerminalWinptyIO -from termqt.termqt.terminal_io_posix import TerminalPOSIXExecIO - - -class TerminalTabWidget(QWidget): - def __init__(self, parent=None): - super().__init__(parent) - self.layout = QVBoxLayout(self) - - self.tabs = QTabWidget() - self.tabs.setTabsClosable(True) - self.tabs.tabCloseRequested.connect(self.closeTab) - self.layout.addWidget(self.tabs) - - self.addButton = QPushButton('New Terminal') - self.addButton.clicked.connect(self.addTerminalTab_button) - self.layout.addWidget(self.addButton) - - def addTerminalTab_button(self): - if platform.system() == "Windows": - self.addTerminalTab('cmd', 'cmd') - else: - self.addTerminalTab('/bin/bash', 'bash') - - def addTerminalTab(self, cmd, title=None): - terminal, scroll, terminal_io = self.createTerminal(cmd) - tab = QWidget() - layout = QHBoxLayout(tab) - layout.addWidget(terminal) - layout.addWidget(scroll) - layout.setSpacing(0) - tab.setLayout(layout) - - index = self.tabs.addTab(tab, title or "Terminal") - self.tabs.setCurrentIndex(index) - - # Start the terminal IO - terminal_io.spawn() - - def closeTab(self, index): - if self.tabs.count() > index: - widget = self.tabs.widget(index) - terminal_io = widget.findChild(TerminalWinptyIO) - if terminal_io and terminal_io.is_alive(): - terminal_io.terminate() - widget.deleteLater() - self.tabs.removeTab(index) - - def createTerminal(self, cmd): - terminal = Terminal( - 400, 300, # min size - font_size=7) - terminal.set_font() - terminal.maximum_line_history = 2000 - scroll = QScrollBar(Qt.Vertical, terminal) - terminal.connect_scroll_bar(scroll) - - # Terminal IO setup - if platform.system() == "Windows": - terminal_io = TerminalWinptyIO( - terminal.row_len, - terminal.col_len, - cmd - ) - else: - terminal_io = TerminalPOSIXExecIO( - terminal.row_len, - terminal.col_len, - cmd - ) - - terminal_io.stdout_callback = terminal.stdout - terminal.stdin_callback = terminal_io.write - terminal.resize_callback = terminal_io.resize - - return terminal, scroll, terminal_io - - -if __name__ == "__main__": - QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) - app = QApplication([]) - main_window = TerminalTabWidget() - main_window.setWindowTitle("termqt on {}".format(platform.system())) - main_window.show() - sys.exit(app.exec()) From 3512a9ac1d112bcc9a32a3d130322d258da02e78 Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Sat, 9 Dec 2023 18:23:31 +0200 Subject: [PATCH 17/18] Delete screenshots/example2.png --- screenshots/example2.png | Bin 84034 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 screenshots/example2.png diff --git a/screenshots/example2.png b/screenshots/example2.png deleted file mode 100644 index d7d6c2307a1fbfe067c23093676c232bc2ca12a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84034 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 From f65d2fba9ecf095422175c8c6c3811185b70bc2b Mon Sep 17 00:00:00 2001 From: Shimon Doodkin Date: Sat, 9 Dec 2023 18:23:45 +0200 Subject: [PATCH 18/18] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index c3e0b94..8a76056 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,6 @@ it can run IPython and perhaps more usual applications. Screenshot -Screenshot - It is worth noting that is project is still work-in-progress and more necessary features shall be added in coming weeks.