Mercurial > hg-stable
comparison mercurial/crecord.py @ 42073:80103ed2e8ee
crecord: new keys g & G to navigate to the top and bottom respectively
This patch introduces two new keys 'g' and 'G' that helps to navigate to the
top and bottom of the file/hunk/line respectively. This is inline with the shortcuts
used in man, less, more and such tools that makes it convenient to navigate
swiftly.
'g' or HOME navigates to the top most file in the ncurses window.
'G' or END navigates to the bottom most file/hunk/line depending on the whether
the fold is active or not.
If the bottom most file is folded, it navigates to that file and stops there.
If the bottom most file is unfolded, it navigates to the bottom most hunk in
that file and stops there. If the bottom most hunk is unfolded, it navigates to
the bottom most line in that hunk.
Differential Revision: https://phab.mercurial-scm.org/D6178
author | Arun Chandrasekaran <aruncxy@gmail.com> |
---|---|
date | Mon, 01 Apr 2019 22:11:54 -0700 |
parents | 66fc05ff0ea3 |
children | 756326d54761 |
comparison
equal
deleted
inserted
replaced
42072:fc0095256513 | 42073:80103ed2e8ee |
---|---|
1465 A : (un-)select all items | 1465 A : (un-)select all items |
1466 up/down-arrow [k/j] : go to previous/next unfolded item | 1466 up/down-arrow [k/j] : go to previous/next unfolded item |
1467 pgup/pgdn [K/J] : go to previous/next item of same type | 1467 pgup/pgdn [K/J] : go to previous/next item of same type |
1468 right/left-arrow [l/h] : go to child item / parent item | 1468 right/left-arrow [l/h] : go to child item / parent item |
1469 shift-left-arrow [H] : go to parent header / fold selected header | 1469 shift-left-arrow [H] : go to parent header / fold selected header |
1470 g : go to the top | |
1471 G : go to the bottom | |
1470 f : fold / unfold item, hiding/revealing its children | 1472 f : fold / unfold item, hiding/revealing its children |
1471 F : fold / unfold parent item and all of its ancestors | 1473 F : fold / unfold parent item and all of its ancestors |
1472 ctrl-l : scroll the selected line to the top of the screen | 1474 ctrl-l : scroll the selected line to the top of the screen |
1473 m : edit / resume editing the commit message | 1475 m : edit / resume editing the commit message |
1474 e : edit the currently selected hunk | 1476 e : edit the currently selected hunk |
1502 curses.endwin() | 1504 curses.endwin() |
1503 self.commenttext = self.ui.edit(self.commenttext, self.ui.username()) | 1505 self.commenttext = self.ui.edit(self.commenttext, self.ui.username()) |
1504 curses.cbreak() | 1506 curses.cbreak() |
1505 self.stdscr.refresh() | 1507 self.stdscr.refresh() |
1506 self.stdscr.keypad(1) # allow arrow-keys to continue to function | 1508 self.stdscr.keypad(1) # allow arrow-keys to continue to function |
1509 | |
1510 def handlefirstlineevent(self): | |
1511 """ | |
1512 Handle 'g' to navigate to the top most file in the ncurses window. | |
1513 """ | |
1514 self.currentselecteditem = self.headerlist[0] | |
1515 currentitem = self.currentselecteditem | |
1516 # select the parent item recursively until we're at a header | |
1517 while True: | |
1518 nextitem = currentitem.parentitem() | |
1519 if nextitem is None: | |
1520 break | |
1521 else: | |
1522 currentitem = nextitem | |
1523 | |
1524 self.currentselecteditem = currentitem | |
1525 | |
1526 def handlelastlineevent(self): | |
1527 """ | |
1528 Handle 'G' to navigate to the bottom most file/hunk/line depending | |
1529 on the whether the fold is active or not. | |
1530 | |
1531 If the bottom most file is folded, it navigates to that file and | |
1532 stops there. If the bottom most file is unfolded, it navigates to | |
1533 the bottom most hunk in that file and stops there. If the bottom most | |
1534 hunk is unfolded, it navigates to the bottom most line in that hunk. | |
1535 """ | |
1536 currentitem = self.currentselecteditem | |
1537 nextitem = currentitem.nextitem() | |
1538 # select the child item recursively until we're at a footer | |
1539 while nextitem is not None: | |
1540 nextitem = currentitem.nextitem() | |
1541 if nextitem is None: | |
1542 break | |
1543 else: | |
1544 currentitem = nextitem | |
1545 | |
1546 self.currentselecteditem = currentitem | |
1547 self.recenterdisplayedarea() | |
1507 | 1548 |
1508 def confirmationwindow(self, windowtext): | 1549 def confirmationwindow(self, windowtext): |
1509 "display an informational window, then wait for and return a keypress." | 1550 "display an informational window, then wait for and return a keypress." |
1510 | 1551 |
1511 confirmwin = curses.newwin(self.yscreensize, 0, 0, 0) | 1552 confirmwin = curses.newwin(self.yscreensize, 0, 0, 0) |
1723 self.togglefolded() | 1764 self.togglefolded() |
1724 elif keypressed in ["F"]: | 1765 elif keypressed in ["F"]: |
1725 self.togglefolded(foldparent=True) | 1766 self.togglefolded(foldparent=True) |
1726 elif keypressed in ["m"]: | 1767 elif keypressed in ["m"]: |
1727 self.commitMessageWindow() | 1768 self.commitMessageWindow() |
1769 elif keypressed in ["g", "KEY_HOME"]: | |
1770 self.handlefirstlineevent() | |
1771 elif keypressed in ["G", "KEY_END"]: | |
1772 self.handlelastlineevent() | |
1728 elif keypressed in ["?"]: | 1773 elif keypressed in ["?"]: |
1729 self.helpwindow() | 1774 self.helpwindow() |
1730 self.stdscr.clear() | 1775 self.stdscr.clear() |
1731 self.stdscr.refresh() | 1776 self.stdscr.refresh() |
1732 elif curses.unctrl(keypressed) in ["^L"]: | 1777 elif curses.unctrl(keypressed) in ["^L"]: |