| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| # 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. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,43 @@ | ||
| import os | ||
| import sys | ||
|
|
||
| CAN_USE_PYREPL = True | ||
|
|
||
| def interactive_console(mainmodule=None, quiet=False, pythonstartup=False): | ||
| global CAN_USE_PYREPL | ||
| if not CAN_USE_PYREPL: | ||
| return sys._baserepl() | ||
|
|
||
| startup_path = os.getenv("PYTHONSTARTUP") | ||
| if pythonstartup and startup_path: | ||
| import tokenize | ||
| with tokenize.open(startup_path) as f: | ||
| startup_code = compile(f.read(), startup_path, "exec") | ||
| exec(startup_code) | ||
|
|
||
| # set sys.{ps1,ps2} just before invoking the interactive interpreter. This | ||
| # mimics what CPython does in pythonrun.c | ||
| if not hasattr(sys, "ps1"): | ||
| sys.ps1 = ">>> " | ||
| if not hasattr(sys, "ps2"): | ||
| sys.ps2 = "... " | ||
| # | ||
| run_interactive = None | ||
| try: | ||
| import errno | ||
| if not os.isatty(sys.stdin.fileno()): | ||
| raise OSError(errno.ENOTTY, "tty required", "stdin") | ||
| from .simple_interact import check | ||
| if err := check(): | ||
| raise RuntimeError(err) | ||
| from .simple_interact import run_multiline_interactive_console | ||
| run_interactive = run_multiline_interactive_console | ||
| except Exception as e: | ||
| print(f"warning: can't use pyrepl: {e}", file=sys.stderr) | ||
| CAN_USE_PYREPL = False | ||
| if run_interactive is None: | ||
| return sys._baserepl() | ||
| return run_interactive(mainmodule) | ||
|
|
||
| if __name__ == "__main__": | ||
| interactive_console() |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| """Minimal '_curses' module, the low-level interface for curses module | ||
| which is not meant to be used directly. | ||
|
|
||
| Based on ctypes. It's too incomplete to be really called '_curses', so | ||
| to use it, you have to import it and stick it in sys.modules['_curses'] | ||
| manually. | ||
|
|
||
| Note that there is also a built-in module _minimal_curses which will | ||
| hide this one if compiled in. | ||
| """ | ||
|
|
||
| import ctypes | ||
| import ctypes.util | ||
|
|
||
|
|
||
| class error(Exception): | ||
| pass | ||
|
|
||
|
|
||
| def _find_clib(): | ||
| trylibs = ["ncursesw", "ncurses", "curses"] | ||
|
|
||
| for lib in trylibs: | ||
| path = ctypes.util.find_library(lib) | ||
| if path: | ||
| return path | ||
| raise ModuleNotFoundError("curses library not found", name="_pyrepl._minimal_curses") | ||
|
|
||
|
|
||
| _clibpath = _find_clib() | ||
| clib = ctypes.cdll.LoadLibrary(_clibpath) | ||
|
|
||
| clib.setupterm.argtypes = [ctypes.c_char_p, ctypes.c_int, ctypes.POINTER(ctypes.c_int)] | ||
| clib.setupterm.restype = ctypes.c_int | ||
|
|
||
| clib.tigetstr.argtypes = [ctypes.c_char_p] | ||
| clib.tigetstr.restype = ctypes.POINTER(ctypes.c_char) | ||
|
|
||
| clib.tparm.argtypes = [ctypes.c_char_p] + 9 * [ctypes.c_int] # type: ignore[operator] | ||
| clib.tparm.restype = ctypes.c_char_p | ||
|
|
||
| OK = 0 | ||
| ERR = -1 | ||
|
|
||
| # ____________________________________________________________ | ||
|
|
||
|
|
||
| def setupterm(termstr, fd): | ||
| err = ctypes.c_int(0) | ||
| result = clib.setupterm(termstr, fd, ctypes.byref(err)) | ||
| if result == ERR: | ||
| raise error("setupterm() failed (err=%d)" % err.value) | ||
|
|
||
|
|
||
| def tigetstr(cap): | ||
| if not isinstance(cap, bytes): | ||
| cap = cap.encode("ascii") | ||
| result = clib.tigetstr(cap) | ||
| if ctypes.cast(result, ctypes.c_void_p).value == ERR: | ||
| return None | ||
| return ctypes.cast(result, ctypes.c_char_p).value | ||
|
|
||
|
|
||
| def tparm(str, i1=0, i2=0, i3=0, i4=0, i5=0, i6=0, i7=0, i8=0, i9=0): | ||
| result = clib.tparm(str, i1, i2, i3, i4, i5, i6, i7, i8, i9) | ||
| if result is None: | ||
| raise error("tparm() returned NULL") | ||
| return result | ||
| Back | FazBrowse Home | New Git URL |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityIs it part of this PR? If not, do you consider adding it or not?
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityYes, sounds like this comment was carried over from pypy but doesn't apply here.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.