9 Commits

Author SHA1 Message Date
8afe36016a Don't override prefix if already provided 2025-11-22 17:59:35 +01:00
b3e848efe8 Delete rr script
Use instead `rr` in the `kshutils` repository.
2025-11-22 17:42:52 +01:00
61efff731f p - Don't ask for command when finished, exit directly 2024-07-05 17:01:11 +02:00
bd5a149cc0 Update Makefile 2024-06-17 12:11:51 +02:00
54217f9944 Accept commands with no arguments 2024-06-17 12:11:11 +02:00
66c1da49fb Send OSC escape sequences 2024-06-17 12:10:42 +02:00
9465227fe7 Plan 9's p pager
Useful for dumb terminals (e.g. `shell` under Emacs).
2024-06-17 12:06:09 +02:00
3e32f1b04e pick - Select one entry from stdin and/or argv
Pick will take stdin and all command line arguments and display a
ksh-like selection menu will all input lines/arguments.
2023-09-13 14:33:21 +02:00
34cfc3cf12 scmfmt - Use par instead of fmt and increase default width
The `-p` option is only available in OpenBSD. As there's no standard
way of ignoring lines by prefix, use `par`, which at least will be
installable almost everywhere.
2023-09-12 17:02:57 +02:00
10 changed files with 222 additions and 50 deletions

View File

@@ -1,7 +1,7 @@
prefix=$$HOME/opt/pkg/miscutils
prefix?=$$HOME/.local
target_bin=${prefix}/bin
target_man=${prefix}/share/man/man1
bin=bwrap hppt mkgmap newp rot rr scmfmt ts upcasetl unpage
bin=bwrap hppt mkgmap newp osc p rot scmfmt ts upcasetl unpage
install:
install -d ${target_bin} ${target_man}
install -c ${bin} ${target_bin}

18
osc Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/env ksh
(( $# < 1 )) && exit 64
[[ -v X_OSC_DISABLE || ! -t 1 ]] && exit 0
case $1 in
link)
[[ -z $2 ]] && exit 64
printf "\e]8;%s\e\\" "$2"
;;
pwd)
(( $# != 1 )) && exit 64
printf "\e]7;file://%s%s\e\\" "$HOSTNAME" "$PWD"
;;
title)
(( $# == 1 )) && exit 64
shift;
printf '\e]2;%s\e\\' "$*"
;;
esac

43
osc.1 Normal file
View File

@@ -0,0 +1,43 @@
.Dd Jun 11, 2024
.Dt TS 1
.Os
.Sh NAME
.Nm osc
.Nd Print OSC escape sequences
.Sh SYNOPSIS
.Nm
.Cm pwd
.Nm
.Cm link
.Ar URI
.Nm
.Cm title
.Ar word ...
.Sh DESCRIPTION
.Nm
prints an OSC escape sequence to stdout if connected to a tty.
If stdout is not a TTY, prints nothing.
.Pp
Three escape sequences are supported:
.Bl -tag
.It pwd
ESC 7, set current working directory.
.It link
ESC 8, display an URI.
.It title
ESC 2, set a title for the current window.
.El
.Pp
Whatever it is done with these escape sequences depends on the
terminal emulator. To avoid printing anything, even on ttys, define
.Ev X_OSC_DISABLE
with any value.
.Sh ENVIRONMENT
.Bl -tag -width X_OSC_DISABLE
.It Ev X_OSC_DISABLE
Don't do anything.
.El
.Sh EXIT STATUS
.Ex -std
.Sh AUTHORS
.An Adolfo Perez Alvarez Aq Mt adolfopa@sdf.org

49
p Executable file
View File

@@ -0,0 +1,49 @@
#!/usr/bin/env perl
use strict;
use warnings;
my $pagesize = $ENV{'LINES'} || 22;
open(my $tty, '<', '/dev/tty')
or die "$0: Cannot open /dev/tty for reading: $!";
sub evalcmd {
{
chomp($_ = <$tty>);
if (/^q$/) {
exit(0);
} elsif (/^!(.*)/) {
system($1);
redo;
}
}
}
sub printfile {
my ($fh) = @_;
my $lines = 0;
while (<$fh>) {
print;
&evalcmd unless ++$lines % $pagesize;
}
}
unshift(@ARGV, '-') unless @ARGV;
my $n = $#ARGV;
for (@ARGV) {
if (/^-$/) {
&printfile(\*STDIN);
&evalcmd if $n--;
} elsif (/^-(\d+)$/) {
$pagesize = $1;
} else {
open(my $fh, '<', $_) or die "$0: Cannot open $_ for reading: $!";
&printfile($fh);
&evalcmd if $n--;
close($fh);
}
}
close($tty);

48
p.1 Normal file
View File

@@ -0,0 +1,48 @@
.Dd May 17, 2024
.Dt TS 1
.Os
.Sh NAME
.Nm p
.Nd Paginate
.Sh SYNOPSIS
.Nm
.Op Fl number
.Ar
.Sh DESCRIPTION
.Nm
copies its standard input, or the named files if given,
to its standard output,
stopping at the end of every page and at the end of each file.
The special file name
.Pa -
can be used to refer explicitly to the standard input.
.Pp
Page size is defined by the
.Ev LINES
environment variable.
If not defined, a default page size of 22 will be used.
The page size can be overriden with the numeric option.
.Pp
While waiting for a newline,
.Nm
interprets the commands:
.Bl -tag
.It !
Run the rest of the line as a shell command.
.It q
Quit.
.El
Any other input will show the next input page.
.Sh ENVIRONMENT
.Bl -tag -width LINES
.It Ev LINES
Number of lines of the terminal.
.El
.Sh EXIT STATUS
.Ex -std
.Sh HISTORY
This is a reimplementation of Plan 9's
.Nm
pager.
.Sh AUTHORS
.An Adolfo Perez Alvarez Aq Mt adolfopa@sdf.org

35
pick Executable file
View File

@@ -0,0 +1,35 @@
#!/usr/bin/env perl
use strict;
use warnings;
use Scalar::Util qw{looks_like_number};
my @choices;
for (@ARGV) {
if (/^--$/) {
push(@choices, <STDIN>);
} elsif (/^@(.+)$/) {
open(my $fh, '<', $1);
push(@choices, <$fh>);
close($fh);
} else {
push(@choices, "$_\n");
}
}
open(my $tty, '<', '/dev/tty');
my $sel;
until (looks_like_number($sel) && $sel > 0 && $sel <= @choices) {
while (my ($i, $c) = each @choices) {
print $i+1 . ') ' . $choices[$i];
}
print $ENV{'PS3'} || '#? ';
exit(1) unless defined($sel = <$tty>);
}
close($tty);
print $choices[$sel - 1];

25
pick.1 Normal file
View File

@@ -0,0 +1,25 @@
.Dd Sep 13, 2023
.Dt TS 1
.Os
.Sh NAME
.Nm pick
.Nd Choose interactively from the set of arguments and input lines
.Sh SYNOPSIS
.Nm
.Ar arg ...
.Sh DESCRIPTION
.Nm
will display a Korn shell style selection menu with stdin contents and
arguments as options.
.Pp
When a selection is made, the command will print its value to stdout.
If the selection is aborted, nothing will be printed.
.Sh ENVIRONMENT
.Bl -tag -width PS3
.It Ev PS3
Prompt string displayed to the user (default: #?).
.El
.Sh EXIT STATUS
.Ex -std
.Sh AUTHORS
.An Adolfo Perez Alvarez Aq Mt adolfopa@sdf.org

16
rr
View File

@@ -1,16 +0,0 @@
#!/bin/sh
[ $# -eq 1 ] && echo "usage: $0 command ..." && exit 64
tmp1=$(mktemp $0.XXXXXXXXXX)
tmp2=$(mktemp $0.XXXXXXXXXX)
trap "rm $tmp1 $tmp2; exit 0" 1 2 15
while "$@" >$tmp2
do
if ! diff $tmp1 $tmp2
then
cp $tmp2 $tmp1
else
echo -n "."
fi
sleep 2
done
rm $tmp1 $tmp2

30
rr.1
View File

@@ -1,30 +0,0 @@
.Dd Jun 10, 2022
.Dt RR 1
.Os
.Sh NAME
.Nm rr
.Nd Repeteadly run a command until it exits with a non zero status
.Sh SYNOPSIS
.Nm
.Ar cmd Op Ar arg ...
.Sh DESCRIPTION
Run command
.Ar cmd arg ...
repeteadly until it fails.
.Pp
In every run, compare its stdout with the one from the previous run.
If there has been any change, print a diff;
otherwise, display a dot to indicate progress.
.Sh EXIT STATUS
.Ex -std
.Sh EXAMPLES
.Bd -literal -offset indent
$ rr pgrep -f foo
0a1,2
> 6871
> 25428
\&...^C
$
.Ed
.Sh AUTHORS
.An Adolfo Perez Alvarez Aq Mt adolfopa@sdf.org

4
scmfmt
View File

@@ -21,9 +21,9 @@ i\
bl' |
sed -e '1s/^/./' -e 's/^ /./' |
fmt -p |
par -P=. |
awk '
BEGIN { LIMIT = 65 }
BEGIN { LIMIT = 72 }
NR == 1 || /^[^\.]/ || length($0) < LIMIT {
sub(/^\./, NR == 1 ? "" : " ");
print;