mirror of
https://github.com/wassname/pyreadline.git
synced 2026-08-11 11:23:56 +08:00
continue to move properties between basemode and rlmain
* Added a no_clipboard module in the clipboard package. Contains
an implementation that emulates the clipboard incase we cannot import
the clipboard.
* Removed uncommented imports in history.
* moved from rlmain to basemode:
tabstop, startup_hook, pre_input_hook, first_prompt, prompt, enable_ipython_paste_list_of_lists
enable_ipython_paste_for_paths, enable_win32_clipboard,paste_line_buffer
* moved next_meta to emacs.py
* fixed tabstop using code in emacs.py
* removed old unsused properties from Readline in rlmain
This commit is contained in:
@@ -1,18 +1,17 @@
|
||||
import sys
|
||||
success=False
|
||||
success=True
|
||||
in_ironpython="IronPython" in sys.version
|
||||
if in_ironpython:
|
||||
try:
|
||||
from ironpython_clipboard import GetClipboardText,SetClipboardText
|
||||
success=True
|
||||
except ImportError:
|
||||
pass
|
||||
from no_clipboard import GetClipboardText,SetClipboardText
|
||||
|
||||
else:
|
||||
try:
|
||||
from win32_clipboard import GetClipboardText,SetClipboardText
|
||||
success=True
|
||||
except ImportError:
|
||||
raise
|
||||
from no_clipboard import GetClipboardText,SetClipboardText
|
||||
|
||||
|
||||
def send_data(lists):
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
#*****************************************************************************
|
||||
import re,operator,string,sys,os
|
||||
|
||||
#import wordmatcher
|
||||
#import pyreadline.clipboard as clipboard
|
||||
from pyreadline.unicode_helper import ensure_unicode,ensure_str
|
||||
if "pyreadline" in sys.modules:
|
||||
pyreadline= sys.modules["pyreadline"]
|
||||
|
||||
@@ -33,6 +33,23 @@ class BaseMode(object):
|
||||
self.completer = None
|
||||
self.begidx = 0
|
||||
self.endidx = 0
|
||||
self.tabstop = 4
|
||||
self.startup_hook = None
|
||||
self.pre_input_hook = None
|
||||
self.first_prompt = True
|
||||
|
||||
self.prompt = ">>>"
|
||||
|
||||
#Paste settings
|
||||
#assumes data on clipboard is path if shorter than 300 characters and doesn't contain \t or \n
|
||||
#and replace \ with / for easier use in ipython
|
||||
self.enable_ipython_paste_for_paths=True
|
||||
|
||||
#automatically convert tabseparated data to list of lists or array constructors
|
||||
self.enable_ipython_paste_list_of_lists=True
|
||||
self.enable_win32_clipboard=True
|
||||
|
||||
self.paste_line_buffer=[]
|
||||
|
||||
def __repr__(self):
|
||||
return "<BaseMode>"
|
||||
@@ -58,12 +75,6 @@ class BaseMode(object):
|
||||
#used in readline
|
||||
ctrl_c_tap_time_interval=property(*_gs("ctrl_c_tap_time_interval"))
|
||||
allow_ctrl_c=property(*_gs("allow_ctrl_c"))
|
||||
next_meta=property(*_gs("next_meta"))
|
||||
first_prompt=property(*_gs("first_prompt"))
|
||||
prompt=property(*_gs("prompt"))
|
||||
paste_line_buffer=property(*_gs("paste_line_buffer"))
|
||||
startup_hook=property(*_gs("startup_hook"))
|
||||
pre_input_hook=property(*_gs("pre_input_hook"))
|
||||
_print_prompt=property(_g("_print_prompt"))
|
||||
_update_line=property(_g("_update_line"))
|
||||
console=property(_g("console"))
|
||||
@@ -77,12 +88,6 @@ class BaseMode(object):
|
||||
_clear_after=property(_g("_clear_after"))
|
||||
_update_prompt_pos=property(_g("_update_prompt_pos"))
|
||||
|
||||
|
||||
enable_win32_clipboard=property(_g("enable_win32_clipboard"))
|
||||
enable_ipython_paste_list_of_lists=property(_g("enable_ipython_paste_list_of_lists"))
|
||||
enable_ipython_paste_for_paths=property(_g("enable_ipython_paste_for_paths"))
|
||||
|
||||
|
||||
#not used in basemode or emacs
|
||||
|
||||
def readline_event_available(self):
|
||||
@@ -109,10 +114,6 @@ class BaseMode(object):
|
||||
except KeyboardInterrupt:
|
||||
event=self.handle_ctrl_c()
|
||||
|
||||
if self.next_meta:
|
||||
self.next_meta = False
|
||||
control, meta, shift, code = event.keyinfo
|
||||
event.keyinfo = (control, True, shift, code)
|
||||
result=self.process_keyevent(event.keyinfo)
|
||||
self._update_line()
|
||||
return result
|
||||
|
||||
@@ -34,6 +34,7 @@ class EmacsMode(basemode.BaseMode):
|
||||
self.previous_func=None
|
||||
self.prompt=">>>"
|
||||
self._insert_verbatim=False
|
||||
self.next_meta = False # True to force meta on next character
|
||||
|
||||
def __repr__(self):
|
||||
return "<EmacsMode>"
|
||||
@@ -48,6 +49,9 @@ class EmacsMode(basemode.BaseMode):
|
||||
#Process exit keys. Only exit on empty line
|
||||
def nop(e):
|
||||
pass
|
||||
if self.next_meta:
|
||||
self.next_meta = False
|
||||
keyinfo.meta=True
|
||||
keytuple=keyinfo.tuple()
|
||||
|
||||
if self._insert_verbatim:
|
||||
@@ -224,7 +228,7 @@ class EmacsMode(basemode.BaseMode):
|
||||
|
||||
def tab_insert(self, e): # (M-TAB)
|
||||
'''Insert a tab character. '''
|
||||
ws = ' ' * (self.tabstop - (self.line_cursor%self.tabstop))
|
||||
ws = ' ' * (self.tabstop - (self.l_buffer.point%self.tabstop))
|
||||
self.insert_text(ws)
|
||||
|
||||
def transpose_chars(self, e): # (C-t)
|
||||
|
||||
@@ -112,8 +112,6 @@ class ViMode(basemode.BaseMode):
|
||||
else:
|
||||
self._vi_command = ViCommand (self)
|
||||
self.vi_set_insert_mode (False)
|
||||
# if self.line_cursor > 0:
|
||||
# self.line_cursor -= 1
|
||||
self.l_buffer.point=lineobj.PrevChar
|
||||
elif self._vi_command and self._vi_command.is_replace_one:
|
||||
self._vi_command.add_char (e.char)
|
||||
@@ -358,7 +356,7 @@ class ViCommand:
|
||||
if char == '\x1b': # escape
|
||||
self.escape (char)
|
||||
elif char == '\x09': # tab
|
||||
ts = self.readline.tabstop
|
||||
ts = self.tabstop
|
||||
ws = ' ' * (ts - (self.readline.l_buffer.point%ts))
|
||||
self.set_text (ws)
|
||||
elif char == '\x08': # backspace
|
||||
|
||||
+12
-33
@@ -40,8 +40,6 @@ def inword(buffer,point):
|
||||
|
||||
class Readline(object):
|
||||
def __init__(self):
|
||||
self.startup_hook = None
|
||||
self.pre_input_hook = None
|
||||
self.console = console.Console()
|
||||
self.size = self.console.size()
|
||||
self.prompt_color = None
|
||||
@@ -49,9 +47,7 @@ class Readline(object):
|
||||
self.selection_color = self.console.saveattr<<4
|
||||
self.key_dispatch = {}
|
||||
self.previous_func = None
|
||||
self.first_prompt = True
|
||||
self.next_meta = False # True to force meta on next character
|
||||
self.tabstop = 4
|
||||
|
||||
self.allow_ctrl_c=False
|
||||
self.ctrl_c_tap_time_interval=0.3
|
||||
self.debug=False
|
||||
@@ -69,34 +65,8 @@ class Readline(object):
|
||||
self.read_inputrc()
|
||||
log("\n".join(self.mode.rl_settings_to_string()))
|
||||
|
||||
#Paste settings
|
||||
#assumes data on clipboard is path if shorter than 300 characters and doesn't contain \t or \n
|
||||
#and replace \ with / for easier use in ipython
|
||||
self.enable_ipython_paste_for_paths=True
|
||||
|
||||
#automatically convert tabseparated data to list of lists or array constructors
|
||||
self.enable_ipython_paste_list_of_lists=True
|
||||
self.enable_win32_clipboard=True
|
||||
|
||||
self.paste_line_buffer=[]
|
||||
self.callback = None
|
||||
|
||||
#Below is for refactoring, raise errors when using old style attributes
|
||||
#that should be refactored out
|
||||
def _g(x):
|
||||
def g(self):
|
||||
raise GetSetError("GET %s"%x)
|
||||
def s(self,q):
|
||||
raise GetSetError("SET %s"%x)
|
||||
return g,s
|
||||
line_buffer=property(*_g("line_buffer"))
|
||||
line_cursor=property(*_g("line_buffer"))
|
||||
undo_stack =property(*_g("undo_stack")) # each entry is a tuple with cursor_position and line_text
|
||||
history_length =property(*_g("history_length")) # each entry is a tuple with cursor_position and line_text
|
||||
history =property(*_g("history")) # each entry is a tuple with cursor_position and line_text
|
||||
history_cursor =property(*_g("history_cursor")) # each entry is a tuple with cursor_position and line_text
|
||||
|
||||
|
||||
# To export as readline interface
|
||||
|
||||
def parse_and_bind(self, string):
|
||||
@@ -134,6 +104,15 @@ class Readline(object):
|
||||
log('error')
|
||||
raise
|
||||
|
||||
def _set_prompt(self, prompt):
|
||||
self.mode.prompt=prompt
|
||||
|
||||
def _get_prompt(self):
|
||||
return self.mode.prompt
|
||||
|
||||
prompt=property(_get_prompt, _set_prompt)
|
||||
|
||||
|
||||
def get_line_buffer(self):
|
||||
'''Return the current contents of the line buffer.'''
|
||||
return self.mode.l_buffer.get_line_text()
|
||||
@@ -228,7 +207,7 @@ class Readline(object):
|
||||
before readline prints the first prompt.
|
||||
|
||||
'''
|
||||
self.startup_hook = function
|
||||
self.mode.startup_hook = function
|
||||
|
||||
def set_pre_input_hook(self, function=None):
|
||||
'''Set or remove the pre_input_hook function.
|
||||
@@ -240,7 +219,7 @@ class Readline(object):
|
||||
starts reading input characters.
|
||||
|
||||
'''
|
||||
self.pre_input_hook = function
|
||||
self.mode.pre_input_hook = function
|
||||
|
||||
## Internal functions
|
||||
|
||||
|
||||
Reference in New Issue
Block a user