about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--scoop.c43
1 files changed, 37 insertions, 6 deletions
diff --git a/scoop.c b/scoop.c
index f735fe2..0b652d9 100644
--- a/scoop.c
+++ b/scoop.c
@@ -118,12 +118,8 @@ int main(int argc, char *argv[]) {
 	}
 	if (optind < argc) search = argv[optind];
 
-	dbFind(path, SQLITE_OPEN_READONLY);
-	if (dbVersion() != DatabaseVersion) {
-		errx(EX_CONFIG, "database out of date; migrate with litterbox -m");
-	}
-
 	if (shell) {
+		dbFind(path, SQLITE_OPEN_READONLY);
 		path = strdup(sqlite3_db_filename(db, "main"));
 		if (!path) err(EX_OSERR, "strdup");
 		dbClose();
@@ -131,7 +127,36 @@ int main(int argc, char *argv[]) {
 		err(EX_UNAVAILABLE, "sqlite3");
 	}
 
-	// TODO: Set up pipe to $PAGER.
+	bool tty = isatty(STDOUT_FILENO);
+	if (tty) {
+		const char *pager = getenv("PAGER");
+		if (!pager) pager = "less";
+		setenv("LESS", "FRX", 0);
+
+		int rw[2];
+		int error = pipe(rw);
+		if (error) err(EX_OSERR, "pipe");
+
+		pid_t pid = fork();
+		if (pid < 0) err(EX_OSERR, "fork");
+
+		if (!pid) {
+			dup2(rw[0], STDIN_FILENO);
+			close(rw[0]);
+			close(rw[1]);
+			execlp(pager, pager, NULL);
+			err(EX_CONFIG, "%s", pager);
+		}
+
+		dup2(rw[1], STDOUT_FILENO);
+		close(rw[0]);
+		close(rw[1]);
+	}
+
+	dbFind(path, SQLITE_OPEN_READONLY);
+	if (dbVersion() != DatabaseVersion) {
+		errx(EX_CONFIG, "database out of date; migrate with litterbox -m");
+	}
 
 	char sql[4096];
 	if (search) {
@@ -205,4 +230,10 @@ int main(int argc, char *argv[]) {
 
 	sqlite3_finalize(stmt);
 	dbClose();
+
+	if (tty) {
+		fclose(stdout);
+		int status;
+		wait(&status);
+	}
 }
ver-highlight'> This reverts commit 279111dda15dd9170e11b9688eb973f2af2e6300. 2019-09-20Enable cookies in titleJune McEnroe Perhaps this will make it less suspicious to Google. Who knows. 2019-09-16Use sensitivity aliases in TF2June McEnroe 2019-09-16Add The Just CityJune McEnroe 2019-09-12Only GET the final redirect locationJune McEnroe 2019-09-12Consume entire bodyJune McEnroe Aborting the request and leaving data around may be causing intermittent errors. Just discard the rest of the data. 2019-09-10Add title -v flagJune McEnroe 2019-09-10Use curl error bufferJune McEnroe 2019-09-10Set Accept-Encoding in titleJune McEnroe Because apparently it's fine for servers to respond with Content-Encoding you didn't ask for, and curl won't decode it if you didn't ask for it. 2019-09-08Set title User-AgentJune McEnroe Some things don't like you if you don't send one. 2019-09-07Add -x flag to titleJune McEnroe 2019-09-07Ignore SIGPIPE in relayJune McEnroe Allows restarting consumers safely. 2019-09-07Add A Memory Called EmpireJune McEnroe 2019-09-05Handle lack of Content-TypeJune McEnroe 2019-09-05Use CURLINFO_CONTENT_TYPEJune McEnroe Oops, didn't see this. 2019-09-05Decode entities in titlesJune McEnroe 2019-09-05Print title as soon as it's availableJune McEnroe 2019-09-05Use CURL_PREFIX to set flagsJune McEnroe 2019-09-05Add titleJune McEnroe 2019-09-04Add Avorter n'est pas tuerJune McEnroe 2019-08-29Unset executable on shell scriptsJune McEnroe 2019-08-29Add long-missing setopt to bin.7June McEnroe 2019-08-29Add editJune McEnroe