Commit 1b12a7b5 authored by Harald Hoyer's avatar Harald Hoyer Committed by Lennart Poettering

pager: introduce "jump to end" option

$ journalctl -be

is what you want :)

https://bugzilla.redhat.com/show_bug.cgi?id=867841
parent 6aa8d43a
......@@ -162,6 +162,20 @@
the journal.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>-e</option></term>
<term><option>--pager-end</option></term>
<listitem><para>Immediately jump to
the end of the journal inside the
implied pager tool. Very useful in
combination with the
<option>-b</option> option. Note that
this is only supported for the
<citerefentry><refentrytitle>less</refentrytitle><manvolnum>1</manvolnum></citerefentry>
pager.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>-n</option></term>
<term><option>--lines=</option></term>
......
......@@ -132,7 +132,7 @@ int main(int argc, char *argv[]) {
}
if (!arg_no_pager) {
r = pager_open();
r = pager_open(false);
if (r > 0) {
if (arg_full == -1)
arg_full = true;
......
......@@ -454,7 +454,7 @@ int main(int argc, char *argv[]) {
arg_flags |= SHOW_OVERRIDDEN;
if (!arg_no_pager)
pager_open();
pager_open(false);
if (optind < argc) {
int i;
......
......@@ -560,7 +560,7 @@ int main(int argc, char *argv[]) {
case ACTION_LIST:
if (!arg_no_pager)
pager_open();
pager_open(false);
r = dump_list(j);
break;
......
......@@ -56,6 +56,7 @@
#define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE)
static OutputMode arg_output = OUTPUT_SHORT;
static bool arg_pager_end = false;
static bool arg_follow = false;
static bool arg_full = false;
static bool arg_all = false;
......@@ -103,6 +104,7 @@ static int help(void) {
" -u --unit=UNIT Show data only from the specified unit\n"
" --user-unit=UNIT Show data only from the specified user session unit\n"
" -p --priority=RANGE Show only messages within the specified priority range\n"
" -e --pager-end Immediately jump to end of the journal in the pager\n"
" -f --follow Follow journal\n"
" -n --lines[=INTEGER] Number of journal entries to show\n"
" --no-tail Show all lines, even in follow mode\n"
......@@ -163,6 +165,7 @@ static int parse_argv(int argc, char *argv[]) {
{ "help", no_argument, NULL, 'h' },
{ "version" , no_argument, NULL, ARG_VERSION },
{ "no-pager", no_argument, NULL, ARG_NO_PAGER },
{ "pager-end", no_argument, NULL, 'e' },
{ "follow", no_argument, NULL, 'f' },
{ "output", required_argument, NULL, 'o' },
{ "all", no_argument, NULL, 'a' },
......@@ -199,7 +202,7 @@ static int parse_argv(int argc, char *argv[]) {
assert(argc >= 0);
assert(argv);
while ((c = getopt_long(argc, argv, "hfo:an::qmbD:p:c:u:F:xr", options, NULL)) >= 0) {
while ((c = getopt_long(argc, argv, "hefo:an::qmbD:p:c:u:F:xr", options, NULL)) >= 0) {
switch (c) {
......@@ -216,6 +219,10 @@ static int parse_argv(int argc, char *argv[]) {
arg_no_pager = true;
break;
case 'e':
arg_pager_end = true;
break;
case 'f':
arg_follow = true;
break;
......@@ -1075,7 +1082,7 @@ int main(int argc, char *argv[]) {
}
if (!arg_no_pager && !arg_follow)
pager_open();
pager_open(arg_pager_end);
if (!arg_quiet) {
usec_t start, end;
......
......@@ -53,7 +53,7 @@ static void pager_open_if_enabled(void) {
if (arg_no_pager)
return;
pager_open();
pager_open(false);
}
static void polkit_agent_open_if_enabled(void) {
......
......@@ -58,7 +58,7 @@ static void pager_open_if_enabled(void) {
if (arg_no_pager)
return;
pager_open();
pager_open(false);
}
static void polkit_agent_open_if_enabled(void) {
......
......@@ -44,7 +44,7 @@ _noreturn_ static void pager_fallback(void) {
_exit(EXIT_SUCCESS);
}
int pager_open(void) {
int pager_open(bool jump_to_end) {
int fd[2];
const char *pager;
pid_t parent_pid;
......@@ -85,7 +85,10 @@ int pager_open(void) {
dup2(fd[0], STDIN_FILENO);
close_pipe(fd);
setenv("LESS", "FRSXK", 0);
if (jump_to_end)
setenv("LESS", "FRSXK+G", 0);
else
setenv("LESS", "FRSXK", 0);
/* Make sure the pager goes away when the parent dies */
if (prctl(PR_SET_PDEATHSIG, SIGTERM) < 0)
......
......@@ -23,6 +23,6 @@
#include <stdbool.h>
int pager_open(void);
int pager_open(bool jump_to_end);
void pager_close(void);
bool pager_have(void);
......@@ -136,7 +136,7 @@ static void pager_open_if_enabled(void) {
if (arg_no_pager)
return;
pager_open();
pager_open(false);
}
static void ask_password_agent_open_if_enabled(void) {
......
......@@ -51,7 +51,7 @@ static void pager_open_if_enabled(void) {
if (arg_no_pager)
return;
pager_open();
pager_open(false);
}
static void polkit_agent_open_if_enabled(void) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment