mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Enable TAB completion for the simple REPL as well
This commit is contained in:
parent
a1ba8f32e0
commit
dfe41f7136
@ -15,9 +15,107 @@ ipydir = os.path.join(cache_dir(), 'ipython')
|
|||||||
BANNER = ('Welcome to the interactive calibre shell!\n')
|
BANNER = ('Welcome to the interactive calibre shell!\n')
|
||||||
|
|
||||||
def setup_pyreadline():
|
def setup_pyreadline():
|
||||||
|
config = '''
|
||||||
|
#Bind keys for exit (keys only work on empty lines
|
||||||
|
#disable_readline(True) #Disable pyreadline completely.
|
||||||
|
from __future__ import print_function, unicode_literals, absolute_import
|
||||||
|
debug_output("off") #"on" saves log info to./pyreadline_debug_log.txt
|
||||||
|
#"on_nologfile" only enables print warning messages
|
||||||
|
bind_exit_key("Control-d")
|
||||||
|
bind_exit_key("Control-z")
|
||||||
|
|
||||||
|
#Commands for moving
|
||||||
|
bind_key("Home", "beginning_of_line")
|
||||||
|
bind_key("End", "end_of_line")
|
||||||
|
bind_key("Left", "backward_char")
|
||||||
|
bind_key("Control-b", "backward_char")
|
||||||
|
bind_key("Right", "forward_char")
|
||||||
|
bind_key("Control-f", "forward_char")
|
||||||
|
bind_key("Alt-f", "forward_word")
|
||||||
|
bind_key("Alt-b", "backward_word")
|
||||||
|
bind_key("Clear", "clear_screen")
|
||||||
|
bind_key("Control-l", "clear_screen")
|
||||||
|
bind_key("Control-a", "beginning_of_line")
|
||||||
|
bind_key("Control-e", "end_of_line")
|
||||||
|
#bind_key("Control-l", "redraw_current_line")
|
||||||
|
|
||||||
|
#Commands for Manipulating the History
|
||||||
|
bind_key("Return", "accept_line")
|
||||||
|
bind_key("Control-p", "previous_history")
|
||||||
|
bind_key("Control-n", "next_history")
|
||||||
|
bind_key("Up", "history_search_backward")
|
||||||
|
bind_key("Down", "history_search_forward")
|
||||||
|
bind_key("Alt-<", "beginning_of_history")
|
||||||
|
bind_key("Alt->", "end_of_history")
|
||||||
|
bind_key("Control-r", "reverse_search_history")
|
||||||
|
bind_key("Control-s", "forward_search_history")
|
||||||
|
bind_key("Alt-p", "non_incremental_reverse_search_history")
|
||||||
|
bind_key("Alt-n", "non_incremental_forward_search_history")
|
||||||
|
|
||||||
|
bind_key("Control-z", "undo")
|
||||||
|
bind_key("Control-_", "undo")
|
||||||
|
|
||||||
|
#Commands for Changing Text
|
||||||
|
bind_key("Delete", "delete_char")
|
||||||
|
bind_key("Control-d", "delete_char")
|
||||||
|
bind_key("BackSpace", "backward_delete_char")
|
||||||
|
#bind_key("Control-Shift-v", "quoted_insert")
|
||||||
|
bind_key("Control-space", "self_insert")
|
||||||
|
bind_key("Control-BackSpace", "backward_delete_word")
|
||||||
|
|
||||||
|
#Killing and Yanking
|
||||||
|
bind_key("Control-k", "kill_line")
|
||||||
|
bind_key("Control-shift-k", "kill_whole_line")
|
||||||
|
bind_key("Escape", "kill_whole_line")
|
||||||
|
bind_key("Meta-d", "kill_word")
|
||||||
|
bind_key("Control-w", "unix_word_rubout")
|
||||||
|
#bind_key("Control-Delete", "forward_kill_word")
|
||||||
|
|
||||||
|
#Copy paste
|
||||||
|
bind_key("Shift-Right", "forward_char_extend_selection")
|
||||||
|
bind_key("Shift-Left", "backward_char_extend_selection")
|
||||||
|
bind_key("Shift-Control-Right", "forward_word_extend_selection")
|
||||||
|
bind_key("Shift-Control-Left", "backward_word_extend_selection")
|
||||||
|
bind_key("Control-m", "set_mark")
|
||||||
|
|
||||||
|
bind_key("Control-Shift-x", "copy_selection_to_clipboard")
|
||||||
|
#bind_key("Control-c", "copy_selection_to_clipboard") #Needs allow_ctrl_c(True) below to be uncommented
|
||||||
|
bind_key("Control-q", "copy_region_to_clipboard")
|
||||||
|
bind_key('Control-Shift-v', "paste_mulitline_code")
|
||||||
|
bind_key("Control-x", "cut_selection_to_clipboard")
|
||||||
|
|
||||||
|
bind_key("Control-v", "paste")
|
||||||
|
bind_key("Control-y", "yank")
|
||||||
|
bind_key("Alt-v", "ipython_paste")
|
||||||
|
|
||||||
|
#Unbinding keys:
|
||||||
|
#un_bind_key("Home")
|
||||||
|
|
||||||
|
#Other
|
||||||
|
bell_style("none") #modes: none, audible, visible(not implemented)
|
||||||
|
show_all_if_ambiguous("on")
|
||||||
|
mark_directories("on")
|
||||||
|
completer_delims(" \t\n\"\\'`@$><=;|&{(?")
|
||||||
|
complete_filesystem("on")
|
||||||
|
debug_output("off")
|
||||||
|
#allow_ctrl_c(True) #(Allows use of ctrl-c as copy key, still propagate keyboardinterrupt when not waiting for input)
|
||||||
|
|
||||||
|
history_filename(%r)
|
||||||
|
history_length(2000) #value of -1 means no limit
|
||||||
|
|
||||||
|
#set_mode("vi") #will cause following bind_keys to bind to vi mode as well as activate vi mode
|
||||||
|
#ctrl_c_tap_time_interval(0.3)
|
||||||
|
'''
|
||||||
try:
|
try:
|
||||||
import pyreadline.rlmain
|
import pyreadline.rlmain
|
||||||
#pyreadline.rlmain.config_path=r"c:\xxx\pyreadlineconfig.ini"
|
if not os.path.exists(ipydir):
|
||||||
|
os.makedirs(ipydir)
|
||||||
|
conf = os.path.join(ipydir, 'pyreadline.txt')
|
||||||
|
hist = os.path.join(ipydir, 'history.txt')
|
||||||
|
config = config % hist
|
||||||
|
with open(conf, 'wb') as f:
|
||||||
|
f.write(config.encode('utf-8'))
|
||||||
|
pyreadline.rlmain.config_path = conf
|
||||||
import readline, atexit
|
import readline, atexit
|
||||||
import pyreadline.unicode_helper # noqa
|
import pyreadline.unicode_helper # noqa
|
||||||
#Normally the codepage for pyreadline is set to be sys.stdout.encoding
|
#Normally the codepage for pyreadline is set to be sys.stdout.encoding
|
||||||
@ -47,10 +145,16 @@ def simple_repl(user_ns={}):
|
|||||||
setup_pyreadline()
|
setup_pyreadline()
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
import rlcompleter # noqa
|
||||||
import readline # noqa
|
import readline # noqa
|
||||||
|
readline.parse_and_bind("tab: complete")
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
user_ns = user_ns or {}
|
||||||
|
import sys, re # noqa
|
||||||
|
for x in ('os', 'sys', 're'):
|
||||||
|
user_ns[x] = user_ns.get(x, globals().get(x, locals().get(x)))
|
||||||
import code
|
import code
|
||||||
code.interact(BANNER, raw_input, user_ns)
|
code.interact(BANNER, raw_input, user_ns)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user