Show More
@@ -1408,9 +1408,11 b' class _chistedit_state(object):' | |||||
1408 | self, |
|
1408 | self, | |
1409 | repo, |
|
1409 | repo, | |
1410 | rules, |
|
1410 | rules, | |
|
1411 | stdscr, | |||
1411 | ): |
|
1412 | ): | |
1412 | self.repo = repo |
|
1413 | self.repo = repo | |
1413 | self.rules = rules |
|
1414 | self.rules = rules | |
|
1415 | self.stdscr = stdscr | |||
1414 | self.pos = 0 |
|
1416 | self.pos = 0 | |
1415 | self.selected = None |
|
1417 | self.selected = None | |
1416 | self.mode = (MODE_INIT, MODE_INIT) |
|
1418 | self.mode = (MODE_INIT, MODE_INIT) | |
@@ -1475,6 +1477,46 b' class _chistedit_state(object):' | |||||
1475 | win.addstr(y, 1, conflictstr[:length]) |
|
1477 | win.addstr(y, 1, conflictstr[:length]) | |
1476 | win.noutrefresh() |
|
1478 | win.noutrefresh() | |
1477 |
|
1479 | |||
|
1480 | def helplines(self): | |||
|
1481 | if self.mode[0] == MODE_PATCH: | |||
|
1482 | help = b"""\ | |||
|
1483 | ?: help, k/up: line up, j/down: line down, v: stop viewing patch | |||
|
1484 | pgup: prev page, space/pgdn: next page, c: commit, q: abort | |||
|
1485 | """ | |||
|
1486 | else: | |||
|
1487 | help = b"""\ | |||
|
1488 | ?: help, k/up: move up, j/down: move down, space: select, v: view patch | |||
|
1489 | d: drop, e: edit, f: fold, m: mess, p: pick, r: roll | |||
|
1490 | pgup/K: move patch up, pgdn/J: move patch down, c: commit, q: abort | |||
|
1491 | """ | |||
|
1492 | return help.splitlines() | |||
|
1493 | ||||
|
1494 | def render_help(self, win): | |||
|
1495 | maxy, maxx = win.getmaxyx() | |||
|
1496 | for y, line in enumerate(self.helplines()): | |||
|
1497 | if y >= maxy: | |||
|
1498 | break | |||
|
1499 | addln(win, y, 0, line, curses.color_pair(COLOR_HELP)) | |||
|
1500 | win.noutrefresh() | |||
|
1501 | ||||
|
1502 | def layout(self): | |||
|
1503 | maxy, maxx = self.stdscr.getmaxyx() | |||
|
1504 | helplen = len(self.helplines()) | |||
|
1505 | mainlen = maxy - helplen - 12 | |||
|
1506 | if mainlen < 1: | |||
|
1507 | raise error.Abort( | |||
|
1508 | _(b"terminal dimensions %d by %d too small for curses histedit") | |||
|
1509 | % (maxy, maxx), | |||
|
1510 | hint=_( | |||
|
1511 | b"enlarge your terminal or use --config ui.interface=text" | |||
|
1512 | ), | |||
|
1513 | ) | |||
|
1514 | return { | |||
|
1515 | b'commit': (12, maxx), | |||
|
1516 | b'help': (helplen, maxx), | |||
|
1517 | b'main': (mainlen, maxx), | |||
|
1518 | } | |||
|
1519 | ||||
1478 |
|
1520 | |||
1479 | def _chisteditmain(repo, rules, stdscr): |
|
1521 | def _chisteditmain(repo, rules, stdscr): | |
1480 | try: |
|
1522 | try: | |
@@ -1503,29 +1545,6 b' def _chisteditmain(repo, rules, stdscr):' | |||||
1503 | except curses.error: |
|
1545 | except curses.error: | |
1504 | pass |
|
1546 | pass | |
1505 |
|
1547 | |||
1506 | def helplines(mode): |
|
|||
1507 | if mode == MODE_PATCH: |
|
|||
1508 | help = b"""\ |
|
|||
1509 | ?: help, k/up: line up, j/down: line down, v: stop viewing patch |
|
|||
1510 | pgup: prev page, space/pgdn: next page, c: commit, q: abort |
|
|||
1511 | """ |
|
|||
1512 | else: |
|
|||
1513 | help = b"""\ |
|
|||
1514 | ?: help, k/up: move up, j/down: move down, space: select, v: view patch |
|
|||
1515 | d: drop, e: edit, f: fold, m: mess, p: pick, r: roll |
|
|||
1516 | pgup/K: move patch up, pgdn/J: move patch down, c: commit, q: abort |
|
|||
1517 | """ |
|
|||
1518 | return help.splitlines() |
|
|||
1519 |
|
||||
1520 | def renderhelp(win, state): |
|
|||
1521 | maxy, maxx = win.getmaxyx() |
|
|||
1522 | mode, _ = state.mode |
|
|||
1523 | for y, line in enumerate(helplines(mode)): |
|
|||
1524 | if y >= maxy: |
|
|||
1525 | break |
|
|||
1526 | addln(win, y, 0, line, curses.color_pair(COLOR_HELP)) |
|
|||
1527 | win.noutrefresh() |
|
|||
1528 |
|
||||
1529 | def renderrules(rulesscr, state): |
|
1548 | def renderrules(rulesscr, state): | |
1530 | rules = state.rules |
|
1549 | rules = state.rules | |
1531 | pos = state.pos |
|
1550 | pos = state.pos | |
@@ -1600,30 +1619,12 b' pgup/K: move patch up, pgdn/J: move patc' | |||||
1600 | content = state.modes[MODE_PATCH][b'patchcontents'] |
|
1619 | content = state.modes[MODE_PATCH][b'patchcontents'] | |
1601 | renderstring(win, state, content[start:], diffcolors=True) |
|
1620 | renderstring(win, state, content[start:], diffcolors=True) | |
1602 |
|
1621 | |||
1603 | def layout(mode): |
|
|||
1604 | maxy, maxx = stdscr.getmaxyx() |
|
|||
1605 | helplen = len(helplines(mode)) |
|
|||
1606 | mainlen = maxy - helplen - 12 |
|
|||
1607 | if mainlen < 1: |
|
|||
1608 | raise error.Abort( |
|
|||
1609 | _(b"terminal dimensions %d by %d too small for curses histedit") |
|
|||
1610 | % (maxy, maxx), |
|
|||
1611 | hint=_( |
|
|||
1612 | b"enlarge your terminal or use --config ui.interface=text" |
|
|||
1613 | ), |
|
|||
1614 | ) |
|
|||
1615 | return { |
|
|||
1616 | b'commit': (12, maxx), |
|
|||
1617 | b'help': (helplen, maxx), |
|
|||
1618 | b'main': (mainlen, maxx), |
|
|||
1619 | } |
|
|||
1620 |
|
||||
1621 | def drawvertwin(size, y, x): |
|
1622 | def drawvertwin(size, y, x): | |
1622 | win = curses.newwin(size[0], size[1], y, x) |
|
1623 | win = curses.newwin(size[0], size[1], y, x) | |
1623 | y += size[0] |
|
1624 | y += size[0] | |
1624 | return win, y, x |
|
1625 | return win, y, x | |
1625 |
|
1626 | |||
1626 | state = _chistedit_state(repo, rules) |
|
1627 | state = _chistedit_state(repo, rules, stdscr) | |
1627 |
|
1628 | |||
1628 | # eventloop |
|
1629 | # eventloop | |
1629 | ch = None |
|
1630 | ch = None | |
@@ -1645,8 +1646,8 b' pgup/K: move patch up, pgdn/J: move patc' | |||||
1645 | if size != stdscr.getmaxyx(): |
|
1646 | if size != stdscr.getmaxyx(): | |
1646 | curses.resizeterm(*size) |
|
1647 | curses.resizeterm(*size) | |
1647 |
|
1648 | |||
|
1649 | sizes = state.layout() | |||
1648 | curmode, unused = state.mode |
|
1650 | curmode, unused = state.mode | |
1649 | sizes = layout(curmode) |
|
|||
1650 | if curmode != oldmode: |
|
1651 | if curmode != oldmode: | |
1651 | state.page_height = sizes[b'main'][0] |
|
1652 | state.page_height = sizes[b'main'][0] | |
1652 | # Adjust the view to fit the current screen size. |
|
1653 | # Adjust the view to fit the current screen size. | |
@@ -1680,7 +1681,7 b' pgup/K: move patch up, pgdn/J: move patc' | |||||
1680 | else: |
|
1681 | else: | |
1681 | renderrules(mainwin, state) |
|
1682 | renderrules(mainwin, state) | |
1682 | state.render_commit(commitwin) |
|
1683 | state.render_commit(commitwin) | |
1683 |
renderhelp(helpwin |
|
1684 | state.render_help(helpwin) | |
1684 | curses.doupdate() |
|
1685 | curses.doupdate() | |
1685 | # done rendering |
|
1686 | # done rendering | |
1686 | ch = encoding.strtolocal(stdscr.getkey()) |
|
1687 | ch = encoding.strtolocal(stdscr.getkey()) |
General Comments 0
You need to be logged in to leave comments.
Login now