SILENT KILLERPanel

Current Path: > > opt > alt > python313 > > lib64 > > python3.13 > _pyrepl


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt/alt/python313//lib64//python3.13/_pyrepl

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
__init__.py File 925 bytes June 23 2025 14:28:16.
__main__.py File 422 bytes June 23 2025 14:28:17.
_minimal_curses.py File 1844 bytes June 23 2025 14:28:17.
_threading_handler.py File 2170 bytes June 23 2025 14:28:17.
base_eventqueue.py File 3837 bytes June 23 2025 14:28:16.
commands.py File 12190 bytes June 23 2025 14:28:16.
completing_reader.py File 10050 bytes June 23 2025 14:28:16.
console.py File 6866 bytes June 23 2025 14:28:16.
curses.py File 1241 bytes June 23 2025 14:28:17.
fancy_termios.py File 2161 bytes June 23 2025 14:28:16.
historical_reader.py File 13240 bytes June 23 2025 14:28:16.
input.py File 3779 bytes June 23 2025 14:28:16.
keymap.py File 6460 bytes June 23 2025 14:28:17.
main.py File 1938 bytes June 23 2025 14:28:16.
mypy.ini File 870 bytes June 11 2025 15:36:57.
pager.py File 5815 bytes June 23 2025 14:28:17.
reader.py File 27712 bytes June 23 2025 14:28:17.
readline.py File 20219 bytes June 23 2025 14:28:16.
simple_interact.py File 5768 bytes June 23 2025 14:28:16.
trace.py File 433 bytes June 23 2025 14:28:16.
types.py File 354 bytes June 23 2025 14:28:16.
unix_console.py File 25637 bytes June 23 2025 14:28:17.
unix_eventqueue.py File 2524 bytes June 23 2025 14:28:17.
utils.py File 2232 bytes June 23 2025 14:28:17.
windows_console.py File 21620 bytes June 23 2025 14:28:16.
windows_eventqueue.py File 991 bytes June 23 2025 14:28:16.

Reading File: //opt/alt/python313//lib64//python3.13/_pyrepl/base_eventqueue.py

#   Copyright 2000-2008 Michael Hudson-Doyle <micahel@gmail.com>
#                       Armin Rigo
#
#                        All Rights Reserved
#
#
# Permission to use, copy, modify, and distribute this software and
# its documentation for any purpose is hereby granted without fee,
# provided that the above copyright notice appear in all copies and
# that both that copyright notice and this permission notice appear in
# supporting documentation.
#
# THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO
# THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

"""
OS-independent base for an event and VT sequence scanner

See unix_eventqueue and windows_eventqueue for subclasses.
"""

from collections import deque

from . import keymap
from .console import Event
from .trace import trace

class BaseEventQueue:
    def __init__(self, encoding: str, keymap_dict: dict[bytes, str]) -> None:
        self.compiled_keymap = keymap.compile_keymap(keymap_dict)
        self.keymap = self.compiled_keymap
        trace("keymap {k!r}", k=self.keymap)
        self.encoding = encoding
        self.events: deque[Event] = deque()
        self.buf = bytearray()

    def get(self) -> Event | None:
        """
        Retrieves the next event from the queue.
        """
        if self.events:
            return self.events.popleft()
        else:
            return None

    def empty(self) -> bool:
        """
        Checks if the queue is empty.
        """
        return not self.events

    def flush_buf(self) -> bytearray:
        """
        Flushes the buffer and returns its contents.
        """
        old = self.buf
        self.buf = bytearray()
        return old

    def insert(self, event: Event) -> None:
        """
        Inserts an event into the queue.
        """
        trace('added event {event}', event=event)
        self.events.append(event)

    def push(self, char: int | bytes) -> None:
        """
        Processes a character by updating the buffer and handling special key mappings.
        """
        assert isinstance(char, (int, bytes))
        ord_char = char if isinstance(char, int) else ord(char)
        char = ord_char.to_bytes()
        self.buf.append(ord_char)

        if char in self.keymap:
            if self.keymap is self.compiled_keymap:
                # sanity check, buffer is empty when a special key comes
                assert len(self.buf) == 1
            k = self.keymap[char]
            trace('found map {k!r}', k=k)
            if isinstance(k, dict):
                self.keymap = k
            else:
                self.insert(Event('key', k, self.flush_buf()))
                self.keymap = self.compiled_keymap

        elif self.buf and self.buf[0] == 27:  # escape
            # escape sequence not recognized by our keymap: propagate it
            # outside so that i can be recognized as an M-... key (see also
            # the docstring in keymap.py
            trace('unrecognized escape sequence, propagating...')
            self.keymap = self.compiled_keymap
            self.insert(Event('key', '\033', bytearray(b'\033')))
            for _c in self.flush_buf()[1:]:
                self.push(_c)

        else:
            try:
                decoded = bytes(self.buf).decode(self.encoding)
            except UnicodeError:
                return
            else:
                self.insert(Event('key', decoded, self.flush_buf()))
            self.keymap = self.compiled_keymap

SILENT KILLER Tool