diff options
author | joe <rbo@gmx.us> | 2025-08-14 18:58:44 +0200 |
---|---|---|
committer | joe <rbo@gmx.us> | 2025-08-14 18:58:44 +0200 |
commit | 6dd1eb323f5447752321d8bafdf60cfb1700159e (patch) | |
tree | e6b1c51d2c47c97b23d2e997d4f1e0e0e018a3f8 /.local/bin/linkview | |
parent | up (diff) | |
download | dotfiles-bsd-6dd1eb323f5447752321d8bafdf60cfb1700159e.tar.gz dotfiles-bsd-6dd1eb323f5447752321d8bafdf60cfb1700159e.tar.bz2 dotfiles-bsd-6dd1eb323f5447752321d8bafdf60cfb1700159e.tar.xz dotfiles-bsd-6dd1eb323f5447752321d8bafdf60cfb1700159e.tar.zst dotfiles-bsd-6dd1eb323f5447752321d8bafdf60cfb1700159e.zip |
up
Diffstat (limited to '.local/bin/linkview')
-rwxr-xr-x | .local/bin/linkview | 211 |
1 files changed, 106 insertions, 105 deletions
diff --git a/.local/bin/linkview b/.local/bin/linkview index d276634..309202d 100755 --- a/.local/bin/linkview +++ b/.local/bin/linkview @@ -14,14 +14,9 @@ use POSIX qw(setsid); use feature qw(switch); no warnings qw(experimental::smartmatch); -my $menu = "dmenu"; +my $menu = "fzf"; my $IMGVIEW_PATH = 'nsxiv -b -a'; -if (defined $ENV{WAYLAND_DISPLAY}) { - $menu = "wmenu"; - $IMGVIEW_PATH = 'imv'; -} - use constant { TERMINAL_PATH => $TERMINAL, MPV_PATH => 'mpv', @@ -33,28 +28,26 @@ use constant { BROWSER_PATH => $BROWSER, NOTIFYSEND_PATH => 'notify-send', COPYQ_PATH => 'copyq', - HOSTNAME => (split /\./, hostname()) + HOSTNAME => (split /\./, hostname())[0] }; use constant PROG_LIST => "" . -"mpv" . "\n" . -"mpv-term" . "\n" . -"ytdl" . "\n" . -"ytdl thumbnail" . "\n" . -"fetch" . "\n" . -"img" . "\n" . -"zathura" . "\n" . -"w3m" . "\n" . -"browser" . "\n" . -"clip" . "\n"; +"play" . "\n" . +"thumb" . "\n" . +"dl" . "\n" . +"img" . "\n" . +"pdf" . "\n" . +"w3m" . "\n" . +"browser" . "\n" . +"clip"; use constant QUAL_LIST => "" . -"1440" . "\n" . -"1080" . "\n" . -"720" . "\n" . -"480" . "\n" . -"360" . "\n" . -"240" . "\n" . -"144" . "\n" . -"uncap" . "\n"; +"uncap" . "\n" . +"1440" . "\n" . +"1080" . "\n" . +"720" . "\n" . +"480" . "\n" . +"360" . "\n" . +"240" . "\n" . +"144" . "\n"; sub open_link { @@ -73,60 +66,73 @@ sub open_link my $val; my @wc; - if ($a eq "mpv") { - if (system(MPV_PATH, $url) != 0) { - system( - NOTIFYSEND_PATH, - '-u', 'critical', - '-t', '10000', - 'playback failed', - ' Failed to open <b>' . $url . '</b>' + if ($a eq "play") { + $pid = fork(); + if (not $pid) { + setsid(); + close_io(); + if (system(MPV_PATH, $url) != 0) { + exec( + NOTIFYSEND_PATH, + '-u', 'critical', + '-t', '10000', + 'playback failed', + ' Failed to open <b>' . $url . '</b>' ); + } + return; } - exit 0; + return; } elsif ($a eq "mpv-term") { exec(TERMINAL_PATH, '-e', MPV_PATH, '--audio-channels=stereo', $url); } - elsif ($a eq "fetch" || $a eq "ytdl") { + elsif ($a eq "dl" || $a eq "ytdl") { + if (is_yt($url) == 1) { + $list = QUAL_LIST; + $quality = `printf "$list" | $menu --prompt 'quality > '`; + if (not $quality) { + return; + } + chomp $quality; + } $pid = fork(); if (not $pid) { setsid(); + close_io(); $ret = -1; - if ($a eq "ytdl") { - $list = QUAL_LIST; - $quality = `printf "$list" | $menu -l 8`; - if (not $quality) { - exit 0; - } - chomp $quality; - chdir home() . "/dl" or - chdir home() . "/Downloads" or - chdir home() or die $!; - if (basename(cwd()) eq basename(home())) { - $pwd = '~/'; - } - else { - $pwd = '~/' . basename(cwd()); - } - $file_name = $url; - $file_name =~ s/.+\///g; + chdir home() . "/dl" or + chdir home() . "/Downloads" or + chdir home() or die $!; + if (basename(cwd()) eq basename(home())) { + $pwd = '~/'; + } + else { + $pwd = '~/' . basename(cwd()); + } + if (is_yt($url) == 1) { $file_name = `yt-dlp -e $url`; if (not $file_name) { - $file_name = "YouTube video"; + $file_name = "yt video"; } - chomp $file_name; - @wc = split / /, $file_name; - if (@wc > 8) { - $file_name = ""; - $i = 0; - while ($i < 8) { - $file_name .= "$wc[$i] "; - $i++; - } - $file_name .= "[...]"; + } + else { + $file_name = $url; + $file_name =~ s/.+\///g; + } + chomp $file_name; + @wc = split / /, $file_name; + if (@wc > 8) { + $file_name = ""; + $i = 0; + while ($i < 8) { + $file_name .= "$wc[$i] "; + $i++; } - $file_name =~ s/^[0-9]+/\[\.\.\.\]/; + $file_name .= "[...]"; + } + $file_name =~ s/^[0-9]+/\[\.\.\.\]/; + if (is_yt($url) == 1) { system( NOTIFYSEND_PATH, '-u', 'low', @@ -159,7 +165,6 @@ sub open_link system( NOTIFYSEND_PATH, '-u', 'normal', - '-t', '10000', 'download complete', ' <b>' . $file_name . '</b> downloaded successfully to ' . '<b>' . $pwd . '</b>' @@ -169,22 +174,20 @@ sub open_link system( NOTIFYSEND_PATH, '-u', 'critical', - '-t', '10000', 'download failed', ' failed to download <b>' . $file_name . '</b>' ); } - exit 0; + return; } elsif ($pid2 < 0) { system( NOTIFYSEND_PATH, '-u', 'critical', - '-t', '10000', 'download failed', ' failed to <b>fork(2)</b>' ); - exit 0; + return; } else { $count = 0; @@ -214,31 +217,9 @@ sub open_link } unlink $tmpfile; } - exit 0; + return; } else { - chdir home() . "/dl" or - chdir home() . "/Downloads" or - chdir home() or die $!; - if (basename(cwd()) eq basename(home())) { - $pwd = '~/'; - } - else { - $pwd = '~/' . basename(cwd()); - } - $file_name = $url; - $file_name =~ s/.+\///g; - @wc = split / /, $file_name; - if (@wc > 8) { - $file_name = ""; - $i = 0; - while ($i < 8) { - $file_name .= "$wc[$i] "; - $i++; - } - $file_name .= "[...]"; - } - $file_name =~ s/^[0-9]+/\[\.\.\.\]/; system( NOTIFYSEND_PATH, '-u', 'low', @@ -273,7 +254,7 @@ sub open_link ); } } - exit 0; + return; } elsif ($pid < 0) { system( @@ -283,13 +264,11 @@ sub open_link 'download failed', ' failed to <b>fork(2)</b>' ); - exit 0; - } - else { - exit 0; + return; } + return; } - elsif ($a eq "ytdl thumbnail") { + elsif ($a eq "thumb") { $pid = fork(); if (not $pid) { setsid(); @@ -342,7 +321,7 @@ sub open_link exit 0; } } - elsif ($a eq "img" || $a eq "zathura") { + elsif ($a eq "img" || $a eq "pdf") { $pid = fork(); if (not $pid) { setsid(); @@ -402,18 +381,40 @@ sub open_link return; } -sub dmenu_prompt +sub close_io +{ + open STDIN, '<', '/dev/null'; + open STDOUT, '>', '/dev/null'; + open STDERR, '>', '/dev/null'; + return; +} + +sub is_yt +{ + my ($url) = @_; + return $url =~ m{ + ^(?:https?://)? + (?:www\.|m\.)? + (?:youtube\.com|youtu\.be)/ + (?: + (?:watch\?v=|embed/|v/|shorts/)? + ) + ([\w-]{11}) + }x; +} + +sub fzf_prompt { my ($url) = @_; my $answer; my $list = PROG_LIST; - $answer = `printf "$list\nURL: $url\n" | $menu -i`; + $answer = `printf "$list\n" | $menu --prompt '$url > '`; chomp $answer; return $answer; } -sub main +sub linkview { my $answer; @@ -421,11 +422,11 @@ sub main print STDERR "linkview: no URL\n"; exit 1; } - $answer = dmenu_prompt($ARGV[0]); + $answer = fzf_prompt($ARGV[0]); open_link($answer, $ARGV[0]); return; } -main(); +linkview(); __END__ |