pyreadline-refactor: Added visible selection mode to emacs-mode.

This commit is contained in:
jstenar
2006-03-21 22:00:03 +00:00
parent 2130c2787c
commit b7b76cd69c
7 changed files with 215 additions and 70 deletions
+93 -3
View File
@@ -6,12 +6,13 @@
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#*****************************************************************************
import os
import os,re
import pyreadline.logger as logger
from pyreadline.logger import log
from pyreadline.keysyms import key_text_to_keyinfo
import pyreadline.lineeditor.lineobj as lineobj
import pyreadline.lineeditor.history as history
import pyreadline.clipboard as clipboard
class BaseMode(object):
mode="base"
@@ -41,11 +42,12 @@ class BaseMode(object):
next_meta=property(*_gs("next_meta"))
first_prompt=property(*_gs("first_prompt"))
prompt=property(*_gs("prompt"))
paste_line_buffer=property(*_gs("paste_line_buffer"))
console=property(_g("console"))
insert_text=property(_g("insert_text"))
_print_prompt=property(_g("_print_prompt"))
_update_line=property(_g("_update_line"))
paste_line_buffer=property(_g("paste_line_buffer"))
add_history=property(_g("add_history"))
_bell=property(_g("_bell"))
_clear_after=property(_g("_clear_after"))
@@ -54,9 +56,11 @@ class BaseMode(object):
_update_prompt_pos=property(_g("_update_prompt_pos"))
_update_line=property(_g("_update_line"))
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"))
_bell=property(_g("_bell"))
_history=property(_g("_history"))
def _readline_from_keyboard(self):
raise NotImplementedError
@@ -229,6 +233,37 @@ class BaseMode(object):
composed of letters and digits.'''
self.l_buffer.backward_word()
def beginning_of_line_extend_selection(self, e): #
'''Move to the start of the current line. '''
self.l_buffer.beginning_of_line_extend_selection()
def end_of_line_extend_selection(self, e): #
'''Move to the end of the line. '''
self.l_buffer.end_of_line_extend_selection()
def forward_char_extend_selection(self, e): #
'''Move forward a character. '''
self.l_buffer.forward_char_extend_selection()
def backward_char_extend_selection(self, e): #
'''Move back a character. '''
self.l_buffer.backward_char_extend_selection()
def forward_word_extend_selection(self, e): #
'''Move forward to the end of the next word. Words are composed of
letters and digits.'''
self.l_buffer.forward_word_extend_selection()
def backward_word_extend_selection(self, e): #
'''Move back to the start of the current or previous word. Words are
composed of letters and digits.'''
self.l_buffer.backward_word_extend_selection()
def clear_screen(self, e): # (C-l)
'''Clear the screen and redraw the current line, leaving the current
line at the top of the screen.'''
@@ -257,8 +292,63 @@ class BaseMode(object):
to kill the characters instead of deleting them.'''
self.l_buffer.backward_delete_char()
def backward_delete_word(self, e): # (Rubout)
'''Delete the character behind the cursor. A numeric argument means
to kill the characters instead of deleting them.'''
self.l_buffer.backward_delete_word()
def self_insert(self, e): # (a, b, A, 1, !, ...)
'''Insert yourself. '''
if ord(e.char)!=0: #don't insert null character in buffer, can happen with dead keys.
self.insert_text(e.char)
# Paste from clipboard
def paste(self,e):
'''Paste windows clipboard'''
if self.enable_win32_clipboard:
txt=clipboard.get_clipboard_text_and_convert(False)
self.insert_text(txt)
def paste_mulitline_code(self,e):
'''Paste windows clipboard'''
reg=re.compile("\r?\n")
if self.enable_win32_clipboard:
txt=clipboard.get_clipboard_text_and_convert(False)
t=reg.split(txt)
t=[row for row in t if row.strip()!=""] #remove empty lines
if t!=[""]:
self.insert_text(t[0])
self.add_history(self.l_buffer.copy())
self.paste_line_buffer=t[1:]
log("multi: %s"%self.paste_line_buffer)
return True
else:
return False
def ipython_paste(self,e):
'''Paste windows clipboard. If enable_ipython_paste_list_of_lists is
True then try to convert tabseparated data to repr of list of lists or
repr of array'''
if self.enable_win32_clipboard:
txt=clipboard.get_clipboard_text_and_convert(
self.enable_ipython_paste_list_of_lists)
if self.enable_ipython_paste_for_paths:
if len(txt)<300 and ("\t" not in txt) and ("\n" not in txt):
txt=txt.replace("\\","/").replace(" ",r"\ ")
self.insert_text(txt)
def copy_region_to_clipboard(self, e): # ()
'''Copy the text in the region to the windows clipboard.'''
self.l_buffer.copy_region_to_clipboard()
def copy_selection_to_clipboard(self, e): # ()
'''Copy the text in the region to the windows clipboard.'''
self.l_buffer.copy_selection_to_clipboard()
def cut_selection_to_clipboard(self, e): # ()
'''Copy the text in the region to the windows clipboard.'''
self.l_buffer.cut_selection_to_clipboard()