diff options
author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-06-11 18:19:39 +0200 |
---|---|---|
committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-06-11 18:19:39 +0200 |
commit | 286b742230cf2c1a0ac944ae2d01c3e0782d0017 (patch) | |
tree | 04cf477add9c9584ae428c08e40b611889a31988 | |
parent | modules/qutebrowser: Use the shell wrapper (diff) | |
download | nixos-config-286b742230cf2c1a0ac944ae2d01c3e0782d0017.zip |
pkgs/tskm/open: Allow opening multiple URLs at a time
-rw-r--r-- | pkgs/by-name/ts/tskm/src/browser/mod.rs | 16 | ||||
-rw-r--r-- | pkgs/by-name/ts/tskm/src/cli.rs | 8 | ||||
-rw-r--r-- | pkgs/by-name/ts/tskm/src/interface/input/handle.rs | 9 | ||||
-rw-r--r-- | pkgs/by-name/ts/tskm/src/interface/open/handle.rs | 10 |
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 = { |