diff options
author | Zac Medico <zmedico@gentoo.org> | 2011-09-28 11:41:44 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-09-28 11:41:44 -0700 |
commit | 3be910392f1186cacf0796e952fb5dae38b10f57 (patch) | |
tree | f8127a0995d1bf3f60b4bf2fb58e1a10ddf85fbe | |
parent | 374aa37ece5d67d003da358e35f0326da3cd2397 (diff) | |
download | portage-3be910392f1186cacf0796e952fb5dae38b10f57.tar.gz portage-3be910392f1186cacf0796e952fb5dae38b10f57.tar.bz2 portage-3be910392f1186cacf0796e952fb5dae38b10f57.zip |
dispatch-conf: support PAGER var for bug #384663
-rwxr-xr-x | bin/dispatch-conf | 32 | ||||
-rw-r--r-- | cnf/dispatch-conf.conf | 10 |
2 files changed, 41 insertions, 1 deletions
diff --git a/bin/dispatch-conf b/bin/dispatch-conf index 497927df4..55d7f13d7 100755 --- a/bin/dispatch-conf +++ b/bin/dispatch-conf @@ -64,6 +64,20 @@ atexit.register(cleanup) MANDATORY_OPTS = [ 'archive-dir', 'diff', 'replace-cvs', 'replace-wscomments', 'merge' ] +def cmd_var_is_valid(cmd): + """ + Return true if the first whitespace-separated token contained + in cmd is an executable file, false otherwise. + """ + cmd = portage.util.shlex_split(cmd) + if not cmd: + return False + + if os.path.isabs(cmd[0]): + return os.access(cmd[0], os.EX_OK) + + return find_binary(cmd[0]) is not None + class dispatch: options = {} @@ -84,6 +98,22 @@ class dispatch: else: self.options["log-file"] = "/dev/null" + pager = self.options.get("pager") + if pager is None or not cmd_var_is_valid(pager): + pager = os.environ.get("PAGER") + if pager is None or not cmd_var_is_valid(pager): + pager = "cat" + + if os.path.basename(pager) == "less": + less_opts = self.options.get("less-opts") + if less_opts is not None and less_opts.strip(): + pager += " " + less_opts + + if os.path.basename(portage.util.shlex_split(pager)[0]) == "cat": + pager = "" + else: + pager = " | " + pager + # # Build list of extant configs # @@ -226,10 +256,12 @@ class dispatch: clear_screen() if show_new_diff: cmd = self.options['diff'] % (conf['new'], mrgconf) + cmd += pager spawn_shell(cmd) show_new_diff = 0 else: cmd = self.options['diff'] % (conf['current'], newconf) + cmd += pager spawn_shell(cmd) print() diff --git a/cnf/dispatch-conf.conf b/cnf/dispatch-conf.conf index b51b61ae1..c4ab33f99 100644 --- a/cnf/dispatch-conf.conf +++ b/cnf/dispatch-conf.conf @@ -22,7 +22,15 @@ use-rcs=no # %s new file # If using colordiff instead of diff, the less -R option may be required # for correct display. -diff="diff -Nu '%s' '%s' | less --no-init --QUIT-AT-EOF" +diff="diff -Nu '%s' '%s'" + +# Set the pager for use with diff commands (this will +# cause the PAGER environment variable to be ignored). +# Setting pager="cat" will disable pager usage. +pager="" + +# Default options used if less is the pager +less-opts="--no-init --QUIT-AT-EOF" # Diff for interactive merges. # %s output file |