aboutsummaryrefslogtreecommitdiffstats
path: root/pkgs/by-name
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-06-11 18:19:39 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-06-11 18:19:39 +0200
commit286b742230cf2c1a0ac944ae2d01c3e0782d0017 (patch)
tree04cf477add9c9584ae428c08e40b611889a31988 /pkgs/by-name
parentmodules/qutebrowser: Use the shell wrapper (diff)
downloadnixos-config-286b742230cf2c1a0ac944ae2d01c3e0782d0017.zip
pkgs/tskm/open: Allow opening multiple URLs at a time
Diffstat (limited to 'pkgs/by-name')
-rw-r--r--pkgs/by-name/ts/tskm/src/browser/mod.rs16
-rw-r--r--pkgs/by-name/ts/tskm/src/cli.rs8
-rw-r--r--pkgs/by-name/ts/tskm/src/interface/input/handle.rs9
-rw-r--r--pkgs/by-name/ts/tskm/src/interface/open/handle.rs10
4 files changed, 23 insertions, 20 deletions
diff --git a/pkgs/by-name/ts/tskm/src/browser/mod.rs b/pkgs/by-name/ts/tskm/src/browser/mod.rs
index 8dd52663..29abfcbd 100644
--- a/pkgs/by-name/ts/tskm/src/browser/mod.rs
+++ b/pkgs/by-name/ts/tskm/src/browser/mod.rs
@@ -17,7 +17,7 @@ use crate::{state::State, task};
pub fn open_in_browser(
selected_project: &task::Project,
state: &mut State,
- url: Option<Url>,
+ urls: Option<Vec<Url>>,
) -> Result<()> {
let old_project: Option<task::Project> =
task::Project::get_current().context("Failed to get currently active project")?;
@@ -104,17 +104,17 @@ pub fn open_in_browser(
if ipc_socket_path.exists() {
let mut stream = UnixStream::connect(ipc_socket_path)?;
- let real_url = if let Some(url) = url {
- url.to_string()
+ let real_url = if let Some(urls) = urls {
+ urls.into_iter().map(|url| url.to_string()).collect()
} else {
// Always add a new tab, so that qutebrowser is marked as “urgent”.
- "qute://start".to_owned()
+ vec!["qute://start".to_owned()]
};
stream.write_all(
json! {
{
- "args": [real_url],
+ "args": real_url,
"target_arg": null,
"version": "1.0.4",
"protocol_version": 1,
@@ -128,10 +128,10 @@ pub fn open_in_browser(
ExitStatus::default()
} else {
- let args = if let Some(url) = url {
- &[url.to_string()][..]
+ let args = if let Some(urls) = urls {
+ urls.iter().map(|url| url.to_string()).collect()
} else {
- &[][..]
+ vec![]
};
process::Command::new(format!(
diff --git a/pkgs/by-name/ts/tskm/src/cli.rs b/pkgs/by-name/ts/tskm/src/cli.rs
index 90d6023b..23d9545f 100644
--- a/pkgs/by-name/ts/tskm/src/cli.rs
+++ b/pkgs/by-name/ts/tskm/src/cli.rs
@@ -126,8 +126,8 @@ pub enum OpenCommand {
#[arg(value_parser = task::Project::from_project_string, add = ArgValueCompleter::new(complete_project))]
project: task::Project,
- /// The URL to open.
- url: Option<Url>,
+ /// The URLs to open.
+ urls: Option<Vec<Url>>,
},
/// Open a selected project in it's Qutebrowser profile.
@@ -135,8 +135,8 @@ pub enum OpenCommand {
/// This will use rofi's dmenu mode to select one project from the list of all registered
/// projects.
Select {
- /// The URL to open.
- url: Option<Url>,
+ /// The URLs to open.
+ urls: Option<Vec<Url>>,
},
/// List all open tabs in the project.
diff --git a/pkgs/by-name/ts/tskm/src/interface/input/handle.rs b/pkgs/by-name/ts/tskm/src/interface/input/handle.rs
index 11304633..76eea6dc 100644
--- a/pkgs/by-name/ts/tskm/src/interface/input/handle.rs
+++ b/pkgs/by-name/ts/tskm/src/interface/input/handle.rs
@@ -69,10 +69,11 @@ pub fn handle(command: InputCommand, state: &mut State) -> Result<()> {
'outer: for all in Input::all()?.chunks(100) {
info!("Starting review for the first hundred URLs.");
- for input in all {
- info!("-> '{input}'");
- open_in_browser(&project, state, Some(input.url.clone()))?;
- }
+ open_in_browser(
+ &project,
+ state,
+ Some(all.iter().map(|f| f.url.clone()).collect()),
+ )?;
{
use std::io::{stdin, stdout, Write};
diff --git a/pkgs/by-name/ts/tskm/src/interface/open/handle.rs b/pkgs/by-name/ts/tskm/src/interface/open/handle.rs
index ca54b422..6243fd32 100644
--- a/pkgs/by-name/ts/tskm/src/interface/open/handle.rs
+++ b/pkgs/by-name/ts/tskm/src/interface/open/handle.rs
@@ -8,6 +8,8 @@
// You should have received a copy of the License along with this program.
// If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+use std::str::FromStr;
+
use anyhow::{bail, Context, Result};
use log::{error, info};
use url::Url;
@@ -51,13 +53,13 @@ pub fn handle(command: OpenCommand, state: &mut State) -> Result<()> {
}
}
}
- OpenCommand::Project { project, url } => {
+ OpenCommand::Project { project, urls } => {
project.touch().context("Failed to touch project")?;
- open_in_browser(&project, state, url).with_context(|| {
+ open_in_browser(&project, state, urls).with_context(|| {
format!("Failed to open project: {}", project.to_project_display())
})?;
}
- OpenCommand::Select { url } => {
+ OpenCommand::Select { urls } => {
let selected_project: task::Project = task::Project::from_project_string(
&rofi::select(
task::Project::all()
@@ -75,7 +77,7 @@ pub fn handle(command: OpenCommand, state: &mut State) -> Result<()> {
.touch()
.context("Failed to touch project")?;
- open_in_browser(&selected_project, state, url).context("Failed to open project")?;
+ open_in_browser(&selected_project, state, urls).context("Failed to open project")?;
}
OpenCommand::ListTabs { projects, mode } => {
let projects = {