1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #include <config.h>
- #include <apt-pkg/configuration.h>
- #include <apt-pkg/fileutl.h>
- #include <apt-private/private-utils.h>
- #include <cstdlib>
- #include <unistd.h>
- // DisplayFileInPager - Display File with pager /*{{{*/
- void DisplayFileInPager(std::string const &filename)
- {
- pid_t Process = ExecFork();
- if (Process == 0)
- {
- const char *Args[3];
- Args[1] = filename.c_str();
- Args[2] = NULL;
- if (isatty(STDOUT_FILENO) == 1)
- {
- // likely installed, provided by sensible-utils
- std::string const pager = _config->Find("Dir::Bin::Pager",
- "sensible-pager");
- Args[0] = pager.c_str();
- execvp(Args[0],(char **)Args);
- // lets try some obvious alternatives
- Args[0] = getenv("PAGER");
- if (Args[0] != NULL)
- execvp(Args[0],(char **)Args);
- Args[0] = "pager";
- execvp(Args[0],(char **)Args);
- }
- // we could read the file ourselves, but… meh
- Args[0] = "cat";
- execvp(Args[0],(char **)Args);
- exit(100);
- }
- // Wait for the subprocess
- ExecWait(Process, "pager", false);
- }
- /*}}}*/
- // EditFileInSensibleEditor - Edit File with editor /*{{{*/
- void EditFileInSensibleEditor(std::string const &filename)
- {
- pid_t Process = ExecFork();
- if (Process == 0)
- {
- // likely installed, provided by sensible-utils
- std::string const editor = _config->Find("Dir::Bin::Editor",
- "sensible-editor");
- const char *Args[3];
- Args[0] = editor.c_str();
- Args[1] = filename.c_str();
- Args[2] = NULL;
- execvp(Args[0],(char **)Args);
- // the usual suspects we can try as an alternative
- Args[0] = getenv("VISUAL");
- if (Args[0] != NULL)
- execvp(Args[0],(char **)Args);
- Args[0] = getenv("EDITOR");
- if (Args[0] != NULL)
- execvp(Args[0],(char **)Args);
- Args[0] = "editor";
- execvp(Args[0],(char **)Args);
- exit(100);
- }
- // Wait for the subprocess
- ExecWait(Process, "editor", false);
- }
- /*}}}*/
|