@@ -244,12 +244,6 @@ def __init__(self, interpreter):
244244 self .text_buffer .connect ('insert-text' , self .on_buf_insert_text )
245245 self .text_buffer .connect ('mark-set' , self .on_buf_mark_set )
246246
247- # Provide our own cursor
248- buffer = self .text_buffer
249- cursor = buffer .create_mark ('cursor' , buffer .get_start_iter (), True )
250- cursor .set_visible (True )
251- buffer .get_insert ().set_visible (False )
252-
253247 def change_line (self , line ):
254248 """
255249 Replace the current input line with `line`.
@@ -315,7 +309,7 @@ def get_cursor_iter(self):
315309 """
316310 Return an iter where the cursor currently is.
317311 """
318- cursor_marker = self .text_buffer .get_mark ( 'cursor' )
312+ cursor_marker = self .text_buffer .get_insert ( )
319313 return self .text_buffer .get_iter_at_mark (cursor_marker )
320314
321315 def get_line_start_iter (self ):
@@ -349,13 +343,11 @@ def do_button_press_event(self, event):
349343 return gtk .TextView .do_button_press_event (self , event )
350344
351345 def do_focus_in_event (self , event ):
352- self .text_buffer .get_mark ('cursor' ).set_visible (True )
353346 if self .list_win_visible :
354347 self .list_win .show ()
355348 return gtk .TextView .do_focus_in_event (self , event )
356349
357350 def do_focus_out_event (self , event ):
358- self .text_buffer .get_mark ('cursor' ).set_visible (False )
359351 if self .list_win_visible :
360352 self .list_win .hide ()
361353 return gtk .TextView .do_focus_out_event (self , event )
@@ -394,7 +386,7 @@ def do_key_press_event(self, event):
394386 if not self .rl_history .is_at_end ():
395387 self .rl_history .enter (self .current_line ())
396388 self .change_line (self .rl_history .back ())
397- self .place_cursor (self .get_line_end_iter ())
389+ self .text_buffer . place_cursor (self .get_line_end_iter ())
398390 return True
399391 elif event .keyval == gtk .keysyms .Down :
400392 if self .list_win_visible :
@@ -403,7 +395,7 @@ def do_key_press_event(self, event):
403395 if not self .rl_history .is_at_start ():
404396 self .rl_history .enter (self .current_line ())
405397 self .change_line (self .rl_history .forward ())
406- self .place_cursor (self .get_line_end_iter ())
398+ self .text_buffer . place_cursor (self .get_line_end_iter ())
407399 return True
408400 elif state & gtk .gdk .SHIFT_MASK :
409401 if (event .keyval == gtk .keysyms .ISO_Left_Tab and
@@ -470,7 +462,7 @@ def move_cursor(self, offset):
470462 """
471463 iter_ = self .get_cursor_iter ()
472464 iter_ .forward_chars (offset )
473- self .place_cursor (iter_ )
465+ self .text_buffer . place_cursor (iter_ )
474466 return iter_
475467
476468 def on_buf_delete_range (self , buffer , start , end ):
@@ -491,38 +483,24 @@ def on_buf_delete_range(self, buffer, start, end):
491483 def on_buf_insert_text (self , buffer , iter_ , text , length ):
492484 if self .editing :
493485 return
486+ self .set_cursor_to_valid_insert_position ()
494487 buffer .emit_stop_by_name ('insert-text' )
495- iter_ = self .get_cursor_iter ()
496488 for (i , line ) in enumerate (text .splitlines ()):
497489 if i :
498490 self .prompt (self .push_line ())
499- iter_ = self .get_cursor_iter ()
500491 with self .editing :
501- buffer .insert (iter_ , line )
502- iter_ = self .move_cursor (len (line ))
492+ buffer .insert_at_cursor (line )
503493 self .highlight_current_line ()
504494 self .complete ()
505495
506496 def on_buf_mark_set (self , buffer , iter_ , textmark ):
507- name = textmark .get_name ()
508- if name == 'insert' :
509- line_start = self .get_line_start_iter ()
510- if line_start .compare (iter_ ) > 0 :
511- # Don't set cursor before the start of line
512- self .text_buffer .move_mark_by_name ('cursor' , line_start )
513- else :
514- self .text_buffer .move_mark_by_name ('cursor' , iter_ )
497+ pass
515498
516499 def on_suggestion_selection_changed (self , selection , word ):
517500 with self .editing :
518501 self .text_buffer .delete (self .get_word_start_iter (),
519502 self .get_cursor_iter ())
520- self .text_buffer .insert (self .get_cursor_iter (), word )
521- self .move_cursor (len (word ))
522-
523- def place_cursor (self , iter_ ):
524- self .text_buffer .place_cursor (iter_ )
525- self .text_buffer .move_mark_by_name ('cursor' , iter_ )
503+ self .text_buffer .insert_at_cursor (word )
526504
527505 def prompt (self , more ):
528506 """
@@ -537,7 +515,7 @@ def prompt(self, more):
537515 text , 'prompt' )
538516 iter_ = self .move_cursor (len (text ))
539517 mark = self .text_buffer .create_mark ('line_start' , iter_ , True )
540- self .place_cursor (iter_ )
518+ self .text_buffer . place_cursor (iter_ )
541519 self .scroll_to_mark (mark , 0.2 )
542520
543521 def push_line (self ):
@@ -547,7 +525,7 @@ def push_line(self):
547525 self .get_line_start_iter (), True )
548526 self .rl_history .append (line )
549527 iter_ = self .get_line_end_iter ()
550- self .place_cursor (iter_ )
528+ self .text_buffer . place_cursor (iter_ )
551529 with self .editing :
552530 self .text_buffer .insert (iter_ , '\n ' )
553531 self .move_cursor (1 )
@@ -569,6 +547,12 @@ def reprint_line(self, lineno, tokens):
569547 self .text_buffer .remove_all_tags (start , end )
570548 self .highlight (start , tokens )
571549
550+ def set_cursor_to_valid_insert_position (self ):
551+ cursor_iter = self .get_cursor_iter ()
552+ line_start_iter = self .get_line_start_iter ()
553+ if line_start_iter .compare (cursor_iter ) > 0 :
554+ self .text_buffer .place_cursor (line_start_iter )
555+
572556 def writetb (self , lines ):
573557 string = '' .join (lines )
574558 with self .editing :
0 commit comments