|
|
@@ -8,45 +8,69 @@
|
|
|
#include <cstdlib>
|
|
|
#include <unistd.h>
|
|
|
|
|
|
-// DisplayFileInPager - Display File with pager /*{{{*/
|
|
|
-void DisplayFileInPager(std::string filename)
|
|
|
+// DisplayFileInPager - Display File with pager /*{{{*/
|
|
|
+void DisplayFileInPager(std::string const &filename)
|
|
|
{
|
|
|
- std::string pager = _config->Find("Dir::Bin::Pager",
|
|
|
- "/usr/bin/sensible-pager");
|
|
|
-
|
|
|
pid_t Process = ExecFork();
|
|
|
if (Process == 0)
|
|
|
{
|
|
|
const char *Args[3];
|
|
|
- Args[0] = pager.c_str();
|
|
|
Args[1] = filename.c_str();
|
|
|
- Args[2] = 0;
|
|
|
+ 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, "sensible-pager", false);
|
|
|
+ ExecWait(Process, "pager", false);
|
|
|
}
|
|
|
/*}}}*/
|
|
|
-// EditFileInSensibleEditor - Edit File with editor /*{{{*/
|
|
|
-void EditFileInSensibleEditor(std::string filename)
|
|
|
+// EditFileInSensibleEditor - Edit File with editor /*{{{*/
|
|
|
+void EditFileInSensibleEditor(std::string const &filename)
|
|
|
{
|
|
|
- std::string editor = _config->Find("Dir::Bin::Editor",
|
|
|
- "/usr/bin/sensible-editor");
|
|
|
-
|
|
|
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] = 0;
|
|
|
+ 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, "sensible-editor", false);
|
|
|
+ ExecWait(Process, "editor", false);
|
|
|
}
|
|
|
/*}}}*/
|