On Mon, Aug 31, 2015 at 12:06:48PM +0200, Karel Zak wrote: > On Sun, Aug 30, 2015 at 09:04:48PM -0500, Bruce Dubbs wrote: > > I have a question about (or a enhancement request) running fdisk. When > > asking to list known partition types, I get about 70 lines of output. > > Generally that would not be a problem, but I was running in a Debian > > install/rescue iso that uses busybox in a 25 line terminal. I do not have a > > way to scroll up and thus cannot see the first 40 or so partition types. > > > > Is there a way to use a pager for this? In this situation 'more' is > > available but 'less' is not. Otherwise I think an automatic pause every 20 > > lines or so would be appropriate to build into the partition type listing. > > We have lib/pager.c and setup_pager(), but it assumes that the pager > is running all time and maintain stdout until parent process > terminate. > > Maybe we can implement something like > > pid = setup_temporary_pager(); > <list partition types> > close_pager(pid); > > as I don't think we want to use pager all time for fdisk. > > Volunteers?:-) > > Karel I'm tempted to volunteer, but I'd like to run something by you first. I presume that setup_temporary_pager() needs to spawn a pager, with the pager inheriting stdout/stderr and stdout temporarily redirected to the pipe, and then close_pager() needs to close the pipe and swap the old stdout/stderr back in, then wait for pid to exit. Thus, I'm thinking that the following prototypes would be better: /* create a pipe, spawn a temporary pager, * dup()s fd 1 and possibly fd 2 before redirecting to the pipe * if an fd is not dup()'d, set the corresponding duplicate to -1 */ pid_t setup_temporary_pager(int *dupout, int *duperr); /* close the pipe, dup2() the saved fds back over fds 1/2, * close the duplicates, and wait for the temporary pager to exit * if either fd is -1, skip it. */ void close_pager(pid, int dupout, int duperr); setup_temporary_pager will return -1 if it does not spawn the pager (whether by failure or by PAGER=cat), or if there are problems during the redirection dance. It will refuse to spawn a pager if (!isatty(STDOUT_FILENO)). Does this sound sensible? Thanks, Isaac Dunham -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html