| 334 | return "break" |
| 335 | |
| 336 | def home_callback(self, event): |
| 337 | if (event.state & 4) != 0 and event.keysym == "Home": |
| 338 | # state&4==Control. If <Control-Home>, use the Tk binding. |
| 339 | return None |
| 340 | if self.text.index("iomark") and \ |
| 341 | self.text.compare("iomark", "<=", "insert lineend") and \ |
| 342 | self.text.compare("insert linestart", "<=", "iomark"): |
| 343 | # In Shell on input line, go to just after prompt |
| 344 | insertpt = int(self.text.index("iomark").split(".")[1]) |
| 345 | else: |
| 346 | line = self.text.get("insert linestart", "insert lineend") |
| 347 | for insertpt in range(len(line)): |
| 348 | if line[insertpt] not in (' ','\t'): |
| 349 | break |
| 350 | else: |
| 351 | insertpt=len(line) |
| 352 | lineat = int(self.text.index("insert").split('.')[1]) |
| 353 | if insertpt == lineat: |
| 354 | insertpt = 0 |
| 355 | dest = "insert linestart+"+str(insertpt)+"c" |
| 356 | if (event.state&1) == 0: |
| 357 | # shift was not pressed |
| 358 | self.text.tag_remove("sel", "1.0", "end") |
| 359 | else: |
| 360 | if not self.text.index("sel.first"): |
| 361 | # there was no previous selection |
| 362 | self.text.mark_set("my_anchor", "insert") |
| 363 | else: |
| 364 | if self.text.compare(self.text.index("sel.first"), "<", |
| 365 | self.text.index("insert")): |
| 366 | self.text.mark_set("my_anchor", "sel.first") # extend back |
| 367 | else: |
| 368 | self.text.mark_set("my_anchor", "sel.last") # extend forward |
| 369 | first = self.text.index(dest) |
| 370 | last = self.text.index("my_anchor") |
| 371 | if self.text.compare(first,">",last): |
| 372 | first,last = last,first |
| 373 | self.text.tag_remove("sel", "1.0", "end") |
| 374 | self.text.tag_add("sel", first, last) |
| 375 | self.text.mark_set("insert", dest) |
| 376 | self.text.see("insert") |
| 377 | return "break" |
| 378 | |
| 379 | def set_status_bar(self): |
| 380 | self.status_bar = self.MultiStatusBar(self.top) |