@@ -306,10 +306,10 @@ def home_callback(self, event):
306306 if (event .state & 4 ) != 0 and event .keysym == "Home" :
307307 # state&4==Control. If <Control-Home>, use the Tk binding.
308308 return
309-
310309 if self .text .index ("iomark" ) and \
311310 self .text .compare ("iomark" , "<=" , "insert lineend" ) and \
312311 self .text .compare ("insert linestart" , "<=" , "iomark" ):
312+ # In Shell on input line, go to just after prompt
313313 insertpt = int (self .text .index ("iomark" ).split ("." )[1 ])
314314 else :
315315 line = self .text .get ("insert linestart" , "insert lineend" )
@@ -318,30 +318,27 @@ def home_callback(self, event):
318318 break
319319 else :
320320 insertpt = len (line )
321-
322321 lineat = int (self .text .index ("insert" ).split ('.' )[1 ])
323-
324322 if insertpt == lineat :
325323 insertpt = 0
326-
327324 dest = "insert linestart+" + str (insertpt )+ "c"
328-
329325 if (event .state & 1 ) == 0 :
330- # shift not pressed
326+ # shift was not pressed
331327 self .text .tag_remove ("sel" , "1.0" , "end" )
332328 else :
333329 if not self .text .index ("sel.first" ):
334- self .text .mark_set ("anchor" ,"insert" )
335-
330+ self .text .mark_set ("my_anchor" , "insert" ) # there was no previous selection
331+ else :
332+ if self .text .compare (self .text .index ("sel.first" ), "<" , self .text .index ("insert" )):
333+ self .text .mark_set ("my_anchor" , "sel.first" ) # extend back
334+ else :
335+ self .text .mark_set ("my_anchor" , "sel.last" ) # extend forward
336336 first = self .text .index (dest )
337- last = self .text .index ("anchor" )
338-
337+ last = self .text .index ("my_anchor" )
339338 if self .text .compare (first ,">" ,last ):
340339 first ,last = last ,first
341-
342340 self .text .tag_remove ("sel" , "1.0" , "end" )
343341 self .text .tag_add ("sel" , first , last )
344-
345342 self .text .mark_set ("insert" , dest )
346343 self .text .see ("insert" )
347344 return "break"
0 commit comments