$90 GRAYBYTE WORDPRESS FILE MANAGER $19

SERVER : premium201.web-hosting.com #1 SMP Wed Mar 26 12:08:09 UTC 2025
SERVER IP : 104.21.43.35 | ADMIN IP 216.73.216.180
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : mail

/opt/alt/python313/lib64/python3.13/_pyrepl/

HOME
Current File : /opt/alt/python313/lib64/python3.13/_pyrepl//base_eventqueue.py
#   Copyright 2000-2008 Michael Hudson-Doyle <[email protected]>
#                       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, bytes(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', 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, bytes(self.flush_buf())))
            self.keymap = self.compiled_keymap


Current_dir [ NOT WRITEABLE ] Document_root [ NOT WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
10 Feb 2026 9.35 AM
root / linksafe
0755
__pycache__
--
10 Feb 2026 9.35 AM
root / linksafe
0755
__init__.py
0.903 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
__main__.py
0.412 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
_minimal_curses.py
1.801 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
_threading_handler.py
2.119 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
base_eventqueue.py
3.75 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
commands.py
12.007 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
completing_reader.py
9.814 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
console.py
6.705 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
curses.py
1.212 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
fancy_termios.py
2.506 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
historical_reader.py
12.93 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
input.py
3.69 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
keymap.py
6.309 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
main.py
1.893 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
mypy.ini
0.85 KB
5 Dec 2025 4.06 PM
root / linksafe
0644
pager.py
5.679 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
reader.py
27.063 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
readline.py
19.747 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
simple_interact.py
5.661 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
trace.py
0.423 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
types.py
0.346 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
unix_console.py
26.095 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
unix_eventqueue.py
2.465 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
utils.py
2.387 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
windows_console.py
21.113 KB
10 Jan 2026 10.39 AM
root / linksafe
0644
windows_eventqueue.py
0.968 KB
10 Jan 2026 10.39 AM
root / linksafe
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025 CONTACT ME
Static GIF