|
0
|
1 #include <iostream> |
|
|
2 #include <sstream> |
|
|
3 #include "process.h" |
|
|
4 std::string extract_pkgname(const std::string& fzf_line) { |
|
|
5 std::istringstream iss(fzf_line); |
|
|
6 std::string marker, pkgver; |
|
|
7 iss >> marker >> pkgver; |
|
|
8 return pkgver; |
|
|
9 } |
|
|
10 int main() { |
|
|
11 char* const query_argv[] = { const_cast<char*>("xbps-query"), const_cast<char*>("-Rs"), const_cast<char*>(""), nullptr }; |
|
|
12 std::string package_list = run_piped("/usr/bin/xbps-query", query_argv, ""); |
|
|
13 char* const fzf_argv[] = { const_cast<char*>("fzf"), nullptr }; |
|
|
14 std::string result = run_piped("/usr/bin/fzf", fzf_argv, package_list); |
|
|
15 |
|
|
16 // strip trailing newline fzf adds |
|
|
17 if (!result.empty() && result.back() == '\n') { |
|
|
18 result.pop_back(); |
|
|
19 } |
|
|
20 std::string pkgname = extract_pkgname(result); |
|
|
21 char* const install_argv[] = { |
|
|
22 const_cast<char*>("doas"), |
|
|
23 const_cast<char*>("xbps-install"), |
|
|
24 const_cast<char*>("-Sy"), |
|
|
25 pkgname.data(), |
|
|
26 nullptr |
|
|
27 }; |
|
|
28 std::string status = spawn(install_argv, "/usr/bin/doas"); |
|
|
29 |
|
|
30 return 0; |
|
|
31 } |