author | Jonas Fonseca <fonseca@diku.dk> | |
Wed, 2 Apr 2008 22:01:15 +0000 (00:01 +0200) | ||
committer | Jonas Fonseca <fonseca@diku.dk> | |
Wed, 2 Apr 2008 22:01:15 +0000 (00:01 +0200) |
manual.txt | patch | blob | history | |
tig.c | patch | blob | history | |
tigrc.5.txt | patch | blob | history |
diff --git a/manual.txt b/manual.txt
index 4e8b402b549d65e906bf90e403938243d7a5473d..0ea404b3a5ecadce2ccd0ad579798c380234a496 100644 (file)
--- a/manual.txt
+++ b/manual.txt
pressing Enter will simply scroll the view one line down.
Tab Switch to next view.
R Reload and refresh the current view.
+M Maximize the current view to fill the whole display.
Up This key is "context sensitive" and will move the cursor one \
line up. However, if you opened a diff view from the main view \
(split- or full-screen) it will change the cursor to point to \
index 1642498714662e1e62c0baf79c2184fce7c6e027..c41f2b2acb054b956151b0da5135b30cb87cabe8 100644 (file)
--- a/tig.c
+++ b/tig.c
REQ_(PREVIOUS, "Move to previous"), \
REQ_(VIEW_NEXT, "Move focus to next view"), \
REQ_(REFRESH, "Reload and refresh"), \
+ REQ_(MAXIMIZE, "Maximize the current view"), \
REQ_(VIEW_CLOSE, "Close the current view"), \
REQ_(QUIT, "Close all views and quit"), \
\
{ KEY_UP, REQ_PREVIOUS },
{ KEY_DOWN, REQ_NEXT },
{ 'R', REQ_REFRESH },
+ { 'M', REQ_MAXIMIZE },
/* Cursor navigation */
{ 'k', REQ_MOVE_UP },
VIEW_(STAGE, "stage", &stage_ops, TRUE, ""),
};
-#define VIEW(req) (&views[(req) - REQ_OFFSET - 1])
+#define VIEW(req) (&views[(req) - REQ_OFFSET - 1])
+#define VIEW_REQ(view) ((view) - views + REQ_OFFSET + 1)
#define foreach_view(view, i) \
for (i = 0; i < ARRAY_SIZE(views) && (view = &views[i]); i++)
return len;
}
+static int
+draw_lineno(struct view *view, unsigned int lineno, int max, bool selected)
+{
+ static char fmt[] = "%1ld";
+ char number[10] = " ";
+ int max_number = MIN(view->digits, STRING_SIZE(number));
+ bool showtrimmed = FALSE;
+ int col;
+
+ lineno += view->offset + 1;
+ if (lineno == 1 || (lineno % opt_num_interval) == 0) {
+ if (view->digits <= 9)
+ fmt[1] = '0' + view->digits;
+
+ if (!string_format(number, fmt, lineno))
+ number[0] = 0;
+ showtrimmed = TRUE;
+ }
+
+ if (max < max_number)
+ max_number = max;
+
+ col = draw_text(view, number, max_number, showtrimmed, selected);
+ if (col < max) {
+ if (!selected)
+ wattrset(view->win, A_NORMAL);
+ waddch(view->win, ACS_VLINE);
+ col++;
+ }
+ if (col < max) {
+ waddch(view->win, ' ');
+ col++;
+ }
+
+ return col;
+}
+
static bool
draw_view_line(struct view *view, unsigned int lineno)
{
report("Refreshing is not yet supported for the %s view", view->name);
break;
+ case REQ_MAXIMIZE:
+ if (displayed_views() == 2)
+ open_view(view, VIEW_REQ(view), OPEN_DEFAULT);
+ break;
+
case REQ_TOGGLE_LINENO:
opt_line_number = !opt_line_number;
redraw_display();
static bool
pager_draw(struct view *view, struct line *line, unsigned int lineno, bool selected)
{
+ static char spaces[] = " ";
char *text = line->data;
enum line_type type = line->type;
- int attr;
+ int attr = A_NORMAL;
+ int col = 0;
wmove(view->win, lineno, 0);
if (selected) {
type = LINE_CURSOR;
wchgat(view->win, -1, 0, type, NULL);
+ attr = get_line_attr(type);
}
-
- attr = get_line_attr(type);
wattrset(view->win, attr);
- if (opt_line_number || opt_tab_size < TABSIZE) {
- static char spaces[] = " ";
- int col_offset = 0, col = 0;
-
- if (opt_line_number) {
- unsigned long real_lineno = view->offset + lineno + 1;
-
- if (real_lineno == 1 ||
- (real_lineno % opt_num_interval) == 0) {
- wprintw(view->win, "%.*d", view->digits, real_lineno);
+ if (opt_line_number) {
+ col += draw_lineno(view, lineno, view->width, selected);
+ if (col >= view->width)
+ return TRUE;
+ }
- } else {
- waddnstr(view->win, spaces,
- MIN(view->digits, STRING_SIZE(spaces)));
- }
- waddstr(view->win, ": ");
- col_offset = view->digits + 2;
- }
+ if (!selected) {
+ attr = get_line_attr(type);
+ wattrset(view->win, attr);
+ }
+ if (opt_tab_size < TABSIZE) {
+ int col_offset = col;
+ col = 0;
while (text && col_offset + col < view->width) {
int cols_max = view->width - col_offset - col;
char *pos = text;
@@ -2749,7 +2790,7 @@ pager_draw(struct view *view, struct line *line, unsigned int lineno, bool selec
}
} else {
- draw_text(view, text, view->width, TRUE, selected);
+ draw_text(view, text, view->width - col, TRUE, selected);
}
return TRUE;
@@ -3594,43 +3635,13 @@ blame_draw(struct view *view, struct line *line, unsigned int lineno, bool selec
}
{
- unsigned long real_lineno = view->offset + lineno + 1;
- char number[10] = " ";
- int max = MIN(view->digits, STRING_SIZE(number));
- bool showtrimmed = FALSE;
-
- if (real_lineno == 1 ||
- (real_lineno % opt_num_interval) == 0) {
- char fmt[] = "%1ld";
-
- if (view->digits <= 9)
- fmt[1] = '0' + view->digits;
-
- if (!string_format(number, fmt, real_lineno))
- number[0] = 0;
- showtrimmed = TRUE;
- }
-
- if (max > view->width - col)
- max = view->width - col;
if (!selected)
wattrset(view->win, get_line_attr(LINE_BLAME_LINENO));
- col += draw_text(view, number, max, showtrimmed, selected);
+ col += draw_lineno(view, lineno, view->width - col, selected);
if (col >= view->width)
return TRUE;
}
- if (!selected)
- wattrset(view->win, A_NORMAL);
-
- if (col >= view->width)
- return TRUE;
- waddch(view->win, ACS_VLINE);
- col++;
- if (col >= view->width)
- return TRUE;
- waddch(view->win, ' ');
- col++;
col += draw_text(view, blame->text, view->width - col, TRUE, selected);
return TRUE;
status_draw(struct view *view, struct line *line, unsigned int lineno, bool selected)
{
struct status *status = line->data;
+ char *text;
+ int col = 0;
wmove(view->win, lineno, 0);
@@ -4014,8 +4027,6 @@ status_draw(struct view *view, struct line *line, unsigned int lineno, bool sele
}
if (!status) {
- char *text;
-
switch (line->type) {
case LINE_STAT_STAGED:
text = "Changes to be committed:";
@@ -4040,19 +4051,16 @@ status_draw(struct view *view, struct line *line, unsigned int lineno, bool sele
default:
return FALSE;
}
+ } else {
+ char buf[] = { status->status, ' ', ' ', ' ', 0 };
- draw_text(view, text, view->width, TRUE, selected);
- return TRUE;
+ col += draw_text(view, buf, view->width, TRUE, selected);
+ if (!selected)
+ wattrset(view->win, A_NORMAL);
+ text = status->new.name;
}
- waddch(view->win, status->status);
- if (!selected)
- wattrset(view->win, A_NORMAL);
- wmove(view->win, lineno, 4);
- if (view->width < 5)
- return TRUE;
-
- draw_text(view, status->new.name, view->width - 5, TRUE, selected);
+ draw_text(view, text, view->width - col, TRUE, selected);
return TRUE;
}
diff --git a/tigrc.5.txt b/tigrc.5.txt
index 745ed74ac6b3ad734a319a244785206d7db45475..f226968008c8fd026871b4c9ccd5be8d30dbdd75 100644 (file)
--- a/tigrc.5.txt
+++ b/tigrc.5.txt
previous Move to previous
view-next Move focus to next view
refresh Reload and refresh view
+maximize Maximize the current view
view-close Close the current view
quit Close all views and quit
------------------------------------------------------------------------------