summaryrefslogtreecommitdiff
path: root/lib/astal/io/process.vala
diff options
context:
space:
mode:
Diffstat (limited to 'lib/astal/io/process.vala')
-rw-r--r--lib/astal/io/process.vala75
1 files changed, 64 insertions, 11 deletions
diff --git a/lib/astal/io/process.vala b/lib/astal/io/process.vala
index e8637ab..8767012 100644
--- a/lib/astal/io/process.vala
+++ b/lib/astal/io/process.vala
@@ -1,3 +1,6 @@
+/**
+ * `Process` provides shortcuts for [[email protected]] with sane defaults.
+ */
public class AstalIO.Process : Object {
private void read_stream(DataInputStream stream, bool err) {
stream.read_line_utf8_async.begin(Priority.DEFAULT, null, (_, res) => {
@@ -23,34 +26,56 @@ public class AstalIO.Process : Object {
private Subprocess process;
public string[] argv { construct; get; }
+
+ /**
+ * When the underlying subprocess writes to its stdout
+ * this signal is emitted with that line.
+ */
public signal void stdout (string out);
+
+ /**
+ * When the underlying subprocess writes to its stderr
+ * this signal is emitted with that line.
+ */
public signal void stderr (string err);
+ /**
+ * Force quit the subprocess.
+ */
public void kill() {
process.force_exit();
}
+ /**
+ * Send a signal to the subprocess.
+ */
public void signal(int signal_num) {
process.send_signal(signal_num);
}
+ /**
+ * Write a line to the subprocess' stdin synchronously.
+ */
public void write(string in) throws Error {
in_stream.put_string(in);
}
- public void write_async(string in) {
- in_stream.write_all_async.begin(
- in.data,
- Priority.DEFAULT, null, (_, res) => {
- try {
- in_stream.write_all_async.end(res, null);
- } catch (Error err) {
- printerr("%s\n", err.message);
- }
- }
- );
+ /**
+ * Write a line to the subprocess' stdin asynchronously.
+ */
+ public async void write_async(string in) {
+ try {
+ yield in_stream.write_all_async(in.data, in.data.length, null, null);
+ } catch (Error err) {
+ printerr("%s\n", err.message);
+ }
}
+ /**
+ * Start a new subprocess with the given command.
+ *
+ * The first element of the vector is executed with the remaining elements as the argument list.
+ */
public Process.subprocessv(string[] cmd) throws Error {
Object(argv: cmd);
process = new Subprocess.newv(cmd,
@@ -65,12 +90,22 @@ public class AstalIO.Process : Object {
read_stream(err_stream, false);
}
+ /**
+ * Start a new subprocess with the given command
+ * which is parsed using [[email protected]_argv].
+ */
public static Process subprocess(string cmd) throws Error {
string[] argv;
Shell.parse_argv(cmd, out argv);
return new Process.subprocessv(argv);
}
+ /**
+ * Execute a command synchronously.
+ * The first element of the vector is executed with the remaining elements as the argument list.
+ *
+ * @return stdout of the subprocess
+ */
public static string execv(string[] cmd) throws Error {
var process = new Subprocess.newv(
cmd,
@@ -88,12 +123,24 @@ public class AstalIO.Process : Object {
throw new IOError.FAILED(err_str.strip());
}
+ /**
+ * Execute a command synchronously.
+ * The command is parsed using [[email protected]_argv].
+ *
+ * @return stdout of the subprocess
+ */
public static string exec(string cmd) throws Error {
string[] argv;
Shell.parse_argv(cmd, out argv);
return Process.execv(argv);
}
+ /**
+ * Execute a command asynchronously.
+ * The first element of the vector is executed with the remaining elements as the argument list.
+ *
+ * @return stdout of the subprocess
+ */
public static async string exec_asyncv(string[] cmd) throws Error {
var process = new Subprocess.newv(
cmd,
@@ -111,6 +158,12 @@ public class AstalIO.Process : Object {
throw new IOError.FAILED(err_str.strip());
}
+ /**
+ * Execute a command asynchronously.
+ * The command is parsed using [[email protected]_argv].
+ *
+ * @return stdout of the subprocess
+ */
public static async string exec_async(string cmd) throws Error {
string[] argv;
Shell.parse_argv(cmd, out argv);