>> My readline history is stored in ~/.pyhist. I can't use >> readline.get_history_length() to mark the start of a session for >> reasons which are not obvious to me. Phillip> get_history_length() is the length you've set for truncation, Phillip> not the actual length. You want get_current_history_length(), Phillip> IIRC. Yes, thanks. I decided to dispense with accessing the "start" of the session and force the user to simply mark() where a session is to start. That's one extra function to remember, but seems a lot more flexible. Appended is my current incarnation. Still doesn't load() right, though save() seems to work. Usage is: mark() ... bunch of commands at the interpreter prompt ... save() Any clues about what I'm doing wrong in load()? I want to stuff the evaluated objects into the globals() of the caller (that is, the globals for the interactive session in most situations). Skip import readline import os import sys # needs to match the filename the user uses! _histfile = os.path.expanduser("~/.pyhist") # where we save sessions _session_file = os.path.expanduser("~/.pysession") # mark with something valid at the interpreter but unlikely to be executed # by the user _marker = '((1.0+999.0j, "mark", 999.0-1.0j))' def save(): end = readline.get_current_history_length() - 1 session = [] item = readline.get_history_item(end) while item != _marker: session.insert(0, item+"\n") end -= 1 item = readline.get_history_item(end) file(_session_file, 'w').writelines(session) print >> sys.stderr, "saved session to", _session_file def load(): execfile(_session_file, sys._getframe(-1).f_globals) print >> sys.stderr, "loaded session from", _session_file def mark(): readline.add_history(_marker) import __builtin__ __builtin__.save = save __builtin__.load = load __builtin__.mark = mark
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4