home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_2350 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  19.0 KB  |  545 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import os
  5. import sys
  6. import time
  7. import pyreadline.logger as logger
  8. from pyreadline.logger import log, log_sock
  9. from pyreadline.lineeditor.lineobj import Point
  10. import pyreadline.lineeditor.lineobj as lineobj
  11. import pyreadline.lineeditor.history as history
  12. import basemode
  13. import string
  14. from pyreadline.unicode_helper import ensure_unicode
  15.  
  16. def format(keyinfo):
  17.     if len(keyinfo[-1]) != 1:
  18.         k = keyinfo + (-1,)
  19.     else:
  20.         k = keyinfo + (ord(keyinfo[-1]),)
  21.     return '(%s,%s,%s,%s,%x)' % k
  22.  
  23. in_ironpython = 'IronPython' in sys.version
  24.  
  25. class EmacsMode(basemode.BaseMode):
  26.     mode = 'emacs'
  27.     
  28.     def __init__(self, rlobj):
  29.         super(EmacsMode, self).__init__(rlobj)
  30.         
  31.         self._keylog = lambda x, y: pass
  32.         self.previous_func = None
  33.         self.prompt = '>>>'
  34.  
  35.     
  36.     def __repr__(self):
  37.         return '<EmacsMode>'
  38.  
  39.     
  40.     def add_key_logger(self, logfun):
  41.         self._keylog = logfun
  42.  
  43.     
  44.     def _readline_from_keyboard(self):
  45.         c = self.console
  46.         
  47.         def nop(e):
  48.             pass
  49.  
  50.         while None:
  51.             lbuf = self.l_buffer
  52.             log_sock('point:%d mark:%d selection_mark:%d' % (lbuf.point, lbuf.mark, lbuf.selection_mark))
  53.             
  54.             try:
  55.                 event = c.getkeypress()
  56.                 log_sock(u'>>%s' % event)
  57.             except KeyboardInterrupt:
  58.                 KeyPress = KeyPress
  59.                 import pyreadline.keysyms.common
  60.                 Event = Event
  61.                 import pyreadline.console.event
  62.                 event = Event(0, 0)
  63.                 event.char = 'c'
  64.                 event.keyinfo = KeyPress('c', shift = False, control = True, meta = False, keyname = None)
  65.                 log_sock('KBDIRQ')
  66.                 if self.allow_ctrl_c:
  67.                     now = time.time()
  68.                     if now - self.ctrl_c_timeout < self.ctrl_c_tap_time_interval:
  69.                         raise 
  70.                     now - self.ctrl_c_timeout < self.ctrl_c_tap_time_interval
  71.                     self.ctrl_c_timeout = now
  72.                 else:
  73.                     raise 
  74.                 self.allow_ctrl_c
  75.  
  76.             if self.next_meta:
  77.                 self.next_meta = False
  78.                 (control, meta, shift, code) = event.keyinfo
  79.                 event.keyinfo = (control, True, shift, code)
  80.             
  81.             keyinfo = event.keyinfo.tuple()
  82.             if keyinfo in self.exit_dispatch:
  83.                 if lineobj.EndOfLine(self.l_buffer) == 0:
  84.                     raise EOFError
  85.                 lineobj.EndOfLine(self.l_buffer) == 0
  86.             
  87.             if len(keyinfo[-1]) > 1:
  88.                 default = nop
  89.             else:
  90.                 default = self.self_insert
  91.             dispatch_func = self.key_dispatch.get(keyinfo, default)
  92.             log('readline from keyboard:%s,%s' % (keyinfo, dispatch_func))
  93.             log_sock(u'%s|%s' % (ensure_unicode(format(keyinfo)), dispatch_func.__name__), 'bound_function')
  94.             r = None
  95.             if dispatch_func:
  96.                 r = dispatch_func(event)
  97.                 self._keylog(dispatch_func, self.l_buffer)
  98.                 self.l_buffer.push_undo()
  99.             
  100.             self.previous_func = dispatch_func
  101.             if r:
  102.                 self._update_line()
  103.                 break
  104.                 continue
  105.             continue
  106.             return None
  107.  
  108.     
  109.     def readline(self, prompt = ''):
  110.         self.ctrl_c_timeout = time.time()
  111.         self.l_buffer.selection_mark = -1
  112.         if self.first_prompt:
  113.             self.first_prompt = False
  114.             if self.startup_hook:
  115.                 
  116.                 try:
  117.                     self.startup_hook()
  118.                 print 'startup hook failed'
  119.                 traceback.print_exc()
  120.  
  121.             
  122.         
  123.         c = self.console
  124.         self.l_buffer.reset_line()
  125.         self.prompt = prompt
  126.         self._print_prompt()
  127.         if self.pre_input_hook:
  128.             
  129.             try:
  130.                 self.pre_input_hook()
  131.             print 'pre_input_hook failed'
  132.             traceback.print_exc()
  133.             self.pre_input_hook = None
  134.  
  135.         
  136.         log('in readline: %s' % self.paste_line_buffer)
  137.         if len(self.paste_line_buffer) > 0:
  138.             self.l_buffer = lineobj.ReadLineTextBuffer(self.paste_line_buffer[0])
  139.             self._update_line()
  140.             self.paste_line_buffer = self.paste_line_buffer[1:]
  141.             c.write('\r\n')
  142.         else:
  143.             self._readline_from_keyboard()
  144.             c.write('\r\n')
  145.         self.add_history(self.l_buffer.copy())
  146.         log('returning(%s)' % self.l_buffer.get_line_text())
  147.         return self.l_buffer.get_line_text() + '\n'
  148.  
  149.     
  150.     def previous_history(self, e):
  151.         self._history.previous_history(self.l_buffer)
  152.         self.l_buffer.point = lineobj.EndOfLine
  153.  
  154.     
  155.     def next_history(self, e):
  156.         self._history.next_history(self.l_buffer)
  157.  
  158.     
  159.     def beginning_of_history(self, e):
  160.         self._history.beginning_of_history()
  161.  
  162.     
  163.     def end_of_history(self, e):
  164.         self._history.end_of_history(self.l_buffer)
  165.  
  166.     
  167.     def _i_search(self, searchfun, direction, init_event):
  168.         c = self.console
  169.         line = self.l_buffer.get_line_text()
  170.         query = ''
  171.         if self.previous_func != self.history_search_forward and self.previous_func != self.history_search_backward:
  172.             self.query = ''.join(self.l_buffer[0:Point].get_line_text())
  173.         
  174.         hc_start = self._history.history_cursor
  175.         while None:
  176.             (x, y) = self.prompt_end_pos
  177.             if direction < 0:
  178.                 prompt = 'reverse-i-search'
  179.             else:
  180.                 prompt = 'forward-i-search'
  181.             scroll = c.write_scrolling("%s`%s': %s" % (prompt, query, line))
  182.             self._update_prompt_pos(scroll)
  183.             self._clear_after()
  184.             event = c.getkeypress()
  185.             if event.keyinfo.keyname == 'backspace':
  186.                 query = query[:-1]
  187.                 if len(query) > 0:
  188.                     line = searchfun(query)
  189.                 else:
  190.                     self._bell()
  191.                     line = ''
  192.             len(query) > 0
  193.             if event.char in string.letters + string.digits + string.punctuation + ' ':
  194.                 query += event.char
  195.                 line = searchfun(query)
  196.                 continue
  197.             if event.keyinfo == init_event.keyinfo:
  198.                 self._history.history_cursor += direction
  199.                 line = searchfun(query)
  200.                 continue
  201.             self._history
  202.             if event.keyinfo.keyname != 'return':
  203.                 self._bell()
  204.             
  205.             break
  206.             continue
  207.             (px, py) = self.prompt_begin_pos
  208.             c.pos(0, py)
  209.             self.l_buffer.set_line(line)
  210.             self._print_prompt()
  211.             self._history.history_cursor = len(self._history.history)
  212.             return None
  213.  
  214.     
  215.     def reverse_search_history(self, e):
  216.         self._i_search(self._history.reverse_search_history, -1, e)
  217.  
  218.     
  219.     def forward_search_history(self, e):
  220.         self._i_search(self._history.forward_search_history, 1, e)
  221.  
  222.     
  223.     def non_incremental_reverse_search_history(self, e):
  224.         q = self._history.non_incremental_reverse_search_history(self.l_buffer)
  225.         self.l_buffer = q
  226.  
  227.     
  228.     def non_incremental_forward_search_history(self, e):
  229.         q = self._history.non_incremental_reverse_search_history(self.l_buffer)
  230.         self.l_buffer = q
  231.  
  232.     
  233.     def history_search_forward(self, e):
  234.         if self.previous_func and hasattr(self._history, self.previous_func.__name__):
  235.             self._history.lastcommand = getattr(self._history, self.previous_func.__name__)
  236.         else:
  237.             self._history.lastcommand = None
  238.         q = self._history.history_search_forward(self.l_buffer)
  239.         self.l_buffer = q
  240.         self.l_buffer.point = q.point
  241.  
  242.     
  243.     def history_search_backward(self, e):
  244.         if self.previous_func and hasattr(self._history, self.previous_func.__name__):
  245.             self._history.lastcommand = getattr(self._history, self.previous_func.__name__)
  246.         else:
  247.             self._history.lastcommand = None
  248.         q = self._history.history_search_backward(self.l_buffer)
  249.         self.l_buffer = q
  250.         self.l_buffer.point = q.point
  251.  
  252.     
  253.     def yank_nth_arg(self, e):
  254.         pass
  255.  
  256.     
  257.     def yank_last_arg(self, e):
  258.         pass
  259.  
  260.     
  261.     def forward_backward_delete_char(self, e):
  262.         pass
  263.  
  264.     
  265.     def quoted_insert(self, e):
  266.         e = self.console.getkeypress()
  267.         self.insert_text(e.char)
  268.  
  269.     
  270.     def tab_insert(self, e):
  271.         ws = ' ' * (self.tabstop - self.line_cursor % self.tabstop)
  272.         self.insert_text(ws)
  273.  
  274.     
  275.     def transpose_chars(self, e):
  276.         self.l_buffer.transpose_chars()
  277.  
  278.     
  279.     def transpose_words(self, e):
  280.         self.l_buffer.transpose_words()
  281.  
  282.     
  283.     def overwrite_mode(self, e):
  284.         pass
  285.  
  286.     
  287.     def kill_line(self, e):
  288.         self.l_buffer.kill_line()
  289.  
  290.     
  291.     def backward_kill_line(self, e):
  292.         self.l_buffer.backward_kill_line()
  293.  
  294.     
  295.     def unix_line_discard(self, e):
  296.         self.l_buffer.unix_line_discard()
  297.  
  298.     
  299.     def kill_whole_line(self, e):
  300.         self.l_buffer.kill_whole_line()
  301.  
  302.     
  303.     def kill_word(self, e):
  304.         self.l_buffer.kill_word()
  305.  
  306.     forward_kill_word = kill_word
  307.     
  308.     def backward_kill_word(self, e):
  309.         self.l_buffer.backward_kill_word()
  310.  
  311.     
  312.     def unix_word_rubout(self, e):
  313.         self.l_buffer.unix_word_rubout()
  314.  
  315.     
  316.     def kill_region(self, e):
  317.         pass
  318.  
  319.     
  320.     def copy_region_as_kill(self, e):
  321.         pass
  322.  
  323.     
  324.     def copy_backward_word(self, e):
  325.         pass
  326.  
  327.     
  328.     def copy_forward_word(self, e):
  329.         pass
  330.  
  331.     
  332.     def yank(self, e):
  333.         self.l_buffer.yank()
  334.  
  335.     
  336.     def yank_pop(self, e):
  337.         self.l_buffer.yank_pop()
  338.  
  339.     
  340.     def digit_argument(self, e):
  341.         args = e.char
  342.         c = self.console
  343.         line = self.l_buffer.get_line_text()
  344.         oldprompt = self.prompt
  345.         
  346.         def nop(e):
  347.             pass
  348.  
  349.         while None:
  350.             (x, y) = self.prompt_end_pos
  351.             self.prompt = '(arg: %s) ' % args
  352.             self._print_prompt()
  353.             self._update_line()
  354.             event = c.getkeypress()
  355.             if event.keyinfo.keyname == 'enter':
  356.                 break
  357.                 continue
  358.             if event.char in '0123456789':
  359.                 args += event.char
  360.                 continue
  361.             self.argument = int(args)
  362.             keyinfo = event.keyinfo.tuple()
  363.             if len(keyinfo[-1]) > 1:
  364.                 default = nop
  365.             else:
  366.                 default = self.self_insert
  367.             dispatch_func = self.key_dispatch.get(keyinfo, default)
  368.             dispatch_func(event)
  369.             break
  370.             continue
  371.             self.prompt = oldprompt
  372.             (x, y) = self.prompt_end_pos
  373.             c.pos(0, y)
  374.             self._print_prompt()
  375.             self._update_line()
  376.             return None
  377.  
  378.     
  379.     def universal_argument(self, e):
  380.         pass
  381.  
  382.     
  383.     def delete_char_or_list(self, e):
  384.         pass
  385.  
  386.     
  387.     def start_kbd_macro(self, e):
  388.         pass
  389.  
  390.     
  391.     def end_kbd_macro(self, e):
  392.         pass
  393.  
  394.     
  395.     def call_last_kbd_macro(self, e):
  396.         pass
  397.  
  398.     
  399.     def re_read_init_file(self, e):
  400.         pass
  401.  
  402.     
  403.     def abort(self, e):
  404.         self._bell()
  405.  
  406.     
  407.     def do_uppercase_version(self, e):
  408.         pass
  409.  
  410.     
  411.     def prefix_meta(self, e):
  412.         self.next_meta = True
  413.  
  414.     
  415.     def undo(self, e):
  416.         self.l_buffer.pop_undo()
  417.  
  418.     
  419.     def revert_line(self, e):
  420.         pass
  421.  
  422.     
  423.     def tilde_expand(self, e):
  424.         pass
  425.  
  426.     
  427.     def set_mark(self, e):
  428.         self.l_buffer.set_mark()
  429.  
  430.     
  431.     def exchange_point_and_mark(self, e):
  432.         pass
  433.  
  434.     
  435.     def character_search(self, e):
  436.         pass
  437.  
  438.     
  439.     def character_search_backward(self, e):
  440.         pass
  441.  
  442.     
  443.     def insert_comment(self, e):
  444.         pass
  445.  
  446.     
  447.     def dump_variables(self, e):
  448.         pass
  449.  
  450.     
  451.     def dump_macros(self, e):
  452.         pass
  453.  
  454.     
  455.     def init_editing_mode(self, e):
  456.         self._bind_exit_key('Control-d')
  457.         self._bind_exit_key('Control-z')
  458.         self._bind_key('space', self.self_insert)
  459.         self._bind_key('Shift-space', self.self_insert)
  460.         self._bind_key('Control-space', self.self_insert)
  461.         self._bind_key('Return', self.accept_line)
  462.         self._bind_key('Left', self.backward_char)
  463.         self._bind_key('Control-b', self.backward_char)
  464.         self._bind_key('Right', self.forward_char)
  465.         self._bind_key('Control-f', self.forward_char)
  466.         self._bind_key('BackSpace', self.backward_delete_char)
  467.         self._bind_key('Control-BackSpace', self.backward_delete_word)
  468.         self._bind_key('Home', self.beginning_of_line)
  469.         self._bind_key('End', self.end_of_line)
  470.         self._bind_key('Delete', self.delete_char)
  471.         self._bind_key('Control-d', self.delete_char)
  472.         self._bind_key('Clear', self.clear_screen)
  473.         self._bind_key('Alt-f', self.forward_word)
  474.         self._bind_key('Alt-b', self.backward_word)
  475.         self._bind_key('Control-l', self.clear_screen)
  476.         self._bind_key('Control-p', self.previous_history)
  477.         self._bind_key('Up', self.history_search_backward)
  478.         self._bind_key('Control-n', self.next_history)
  479.         self._bind_key('Down', self.history_search_forward)
  480.         self._bind_key('Control-a', self.beginning_of_line)
  481.         self._bind_key('Control-e', self.end_of_line)
  482.         self._bind_key('Alt-<', self.beginning_of_history)
  483.         self._bind_key('Alt->', self.end_of_history)
  484.         self._bind_key('Control-r', self.reverse_search_history)
  485.         self._bind_key('Control-s', self.forward_search_history)
  486.         self._bind_key('Alt-p', self.non_incremental_reverse_search_history)
  487.         self._bind_key('Alt-n', self.non_incremental_forward_search_history)
  488.         self._bind_key('Control-z', self.undo)
  489.         self._bind_key('Control-_', self.undo)
  490.         self._bind_key('Escape', self.kill_whole_line)
  491.         self._bind_key('Meta-d', self.kill_word)
  492.         self._bind_key('Control-Delete', self.forward_delete_word)
  493.         self._bind_key('Control-w', self.unix_word_rubout)
  494.         self._bind_key('Control-v', self.paste)
  495.         self._bind_key('Alt-v', self.ipython_paste)
  496.         self._bind_key('Control-y', self.yank)
  497.         self._bind_key('Control-k', self.kill_line)
  498.         self._bind_key('Control-m', self.set_mark)
  499.         self._bind_key('Control-q', self.copy_region_to_clipboard)
  500.         self._bind_key('Control-Shift-v', self.paste_mulitline_code)
  501.         self._bind_key('Control-Right', self.forward_word_end)
  502.         self._bind_key('Control-Left', self.backward_word)
  503.         self._bind_key('Shift-Right', self.forward_char_extend_selection)
  504.         self._bind_key('Shift-Left', self.backward_char_extend_selection)
  505.         self._bind_key('Shift-Control-Right', self.forward_word_end_extend_selection)
  506.         self._bind_key('Shift-Control-Left', self.backward_word_extend_selection)
  507.         self._bind_key('Shift-Home', self.beginning_of_line_extend_selection)
  508.         self._bind_key('Shift-End', self.end_of_line_extend_selection)
  509.         self._bind_key('numpad0', self.self_insert)
  510.         self._bind_key('numpad1', self.self_insert)
  511.         self._bind_key('numpad2', self.self_insert)
  512.         self._bind_key('numpad3', self.self_insert)
  513.         self._bind_key('numpad4', self.self_insert)
  514.         self._bind_key('numpad5', self.self_insert)
  515.         self._bind_key('numpad6', self.self_insert)
  516.         self._bind_key('numpad7', self.self_insert)
  517.         self._bind_key('numpad8', self.self_insert)
  518.         self._bind_key('numpad9', self.self_insert)
  519.         self._bind_key('add', self.self_insert)
  520.         self._bind_key('subtract', self.self_insert)
  521.         self._bind_key('multiply', self.self_insert)
  522.         self._bind_key('divide', self.self_insert)
  523.         self._bind_key('vk_decimal', self.self_insert)
  524.         log('RUNNING INIT EMACS')
  525.  
  526.  
  527.  
  528. def commonprefix(m):
  529.     if not m:
  530.         return ''
  531.     prefix = m[0]
  532.     for item in m:
  533.         for i in range(len(prefix)):
  534.             if prefix[:i + 1].lower() != item[:i + 1].lower():
  535.                 prefix = prefix[:i]
  536.                 if i == 0:
  537.                     return ''
  538.                 break
  539.                 continue
  540.             i == 0
  541.         
  542.     
  543.     return prefix
  544.  
  545.