summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c622eef)
raw | patch | inline | side by side (parent: c622eef)
author | Jonas Fonseca <fonseca@diku.dk> | |
Thu, 18 May 2006 08:06:02 +0000 (10:06 +0200) | ||
committer | Jonas Fonseca <fonseca@antimatter.localdomain> | |
Thu, 18 May 2006 08:06:02 +0000 (10:06 +0200) |
tig.c | patch | blob | history |
index 64a8f4a33145a044d2110a22e7ba35b6095b289a..9c2665669c916245fea9def3930d11efc6357e16 100644 (file)
--- a/tig.c
+++ b/tig.c
#define TIG_PAGER_CMD \
""
+
/**
* The viewer
* ----------
+ * The display consists of a status window on the last line of the screen and
+ * one or more views. The default is to only show one view at the time but it
+ * is possible to split both the main and log view to also show the commit
+ * diff.
*
- * tig(1) presents various 'views' of a repository. Each view is based on output
- * from an external command, most often 'git log', 'git diff', or 'git show'.
- *
- * The main view::
- * Is the default view, and it shows a one line summary of each commit
- * in the chosen list of revisions. The summary includes commit date,
- * author, and the first line of the log message. Additionally, any
- * repository references, such as tags, will be shown.
- *
- * The log view::
- * Presents a more rich view of the revision log showing the whole log
- * message and the diffstat.
+ * If you are in the log view and press 'Enter' when the current line is a
+ * commit line, such as:
*
- * The diff view::
- * Shows either the diff of the current working tree, that is, what
- * has changed since the last commit, or the commit diff complete
- * with log message, diffstat and diff.
+ * commit 4d55caff4cc89335192f3e566004b4ceef572521
*
- * The pager view::
- * Is used for displaying both input from stdin and output from git
- * commands entered in the internal prompt.
+ * You will split the view so that the log view is displayed in the top window
+ * and the diff view in the bottom window. You can switch between the two
+ * views by pressing 'Tab'. To maximize the log view again, simply press 'l'.
+ **/
+
+struct view;
+
+/* The display array of active views and the index of the current view. */
+static struct view *display[2];
+static unsigned int current_view;
+
+#define foreach_view(view, i) \
+ for (i = 0; i < ARRAY_SIZE(display) && (view = display[i]); i++)
+
+
+/**
+ * Current head and commit ID
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * The viewer keeps track of both what head and commit ID you are currently
+ * viewing. The commit ID will follow the cursor line and change everytime time
+ * you highlight a different commit. Whenever you reopen the diff view it
+ * will be reloaded, if the commit ID changed.
*
- * The help view::
- * Displays the information from the tig(1) man page. For the help view
- * to work you need to have the tig(1) man page installed.
+ * The head ID is used when opening the main and log view to indicate from
+ * what revision to show history.
**/
+static char ref_commit[SIZEOF_REF] = "HEAD";
+static char ref_head[SIZEOF_REF] = "HEAD";
+
+
struct view {
const char *name; /* View name */
const char *cmd_fmt; /* Default command line format */
static struct view_ops pager_ops;
static struct view_ops main_ops;
-static char ref_head[SIZEOF_REF] = "HEAD";
-static char ref_commit[SIZEOF_REF] = "HEAD";
-
#define VIEW_STR(name, cmd, env, ref, objsize, ops) \
{ name, cmd, #env, ref, objsize, ops }
#define VIEW_(id, name, ops, ref, objsize) \
VIEW_STR(name, TIG_##id##_CMD, TIG_##id##_CMD, ref, objsize, ops)
+/**
+ * Views
+ * ~~~~~
+ * tig(1) presents various 'views' of a repository. Each view is based on output
+ * from an external command, most often 'git log', 'git diff', or 'git show'.
+ *
+ * The main view::
+ * Is the default view, and it shows a one line summary of each commit
+ * in the chosen list of revisions. The summary includes commit date,
+ * author, and the first line of the log message. Additionally, any
+ * repository references, such as tags, will be shown.
+ *
+ * The log view::
+ * Presents a more rich view of the revision log showing the whole log
+ * message and the diffstat.
+ *
+ * The diff view::
+ * Shows either the diff of the current working tree, that is, what
+ * has changed since the last commit, or the commit diff complete
+ * with log message, diffstat and diff.
+ *
+ * The pager view::
+ * Is used for displaying both input from stdin and output from git
+ * commands entered in the internal prompt.
+ *
+ * The help view::
+ * Displays the information from the tig(1) man page. For the help view
+ * to work you need to have the tig(1) man page installed.
+ **/
+
static struct view views[] = {
VIEW_(MAIN, "main", &main_ops, ref_head, sizeof(struct commit)),
VIEW_(DIFF, "diff", &pager_ops, ref_commit, sizeof(char)),
VIEW_(LOG, "log", &pager_ops, ref_head, sizeof(char)),
- VIEW_(HELP, "help", &pager_ops, ref_head, sizeof(char)),
+ VIEW_(HELP, "help", &pager_ops, "static", sizeof(char)),
VIEW_(PAGER, "pager", &pager_ops, "static", sizeof(char)),
};
#define VIEW(req) (&views[(req) - REQ_OFFSET - 1])
-/* The display array of active views and the index of the current view. */
-static struct view *display[2];
-static unsigned int current_view;
-
-#define foreach_view(view, i) \
- for (i = 0; i < ARRAY_SIZE(display) && (view = display[i]); i++)
-
static void
redraw_view_from(struct view *view, int lineno)
redraw_view_from(view, 0);
}
+
+/**
+ * Title windows
+ * ~~~~~~~~~~~~~
+ * Each view has a title window which shows the name of the view, current
+ * commit ID if available, and where the view is positioned:
+ *
+ * [main] c622eefaa485995320bc743431bae0d497b1d875 - commit 1 of 61 (1%)
+ *
+ * By default, the title of the current view is highlighted using bold font.
+ **/
+
static void
update_view_title(struct view *view)
{
werase(view->title);
wmove(view->title, 0, 0);
- /* [main] ref: 334b506... - commit 6 of 4383 (0%) */
-
if (*view->ref)
wprintw(view->title, "[%s] %s", view->name, view->ref);
else