goodbye shell version of um
This commit is contained in:
parent
c9adc0a23a
commit
222e5fd52f
21 changed files with 0 additions and 383 deletions
9
.gitmodules
vendored
9
.gitmodules
vendored
|
|
@ -1,9 +0,0 @@
|
||||||
[submodule "shell/test/bats"]
|
|
||||||
path = shell/test/bats
|
|
||||||
url = https://github.com/bats-core/bats-core.git
|
|
||||||
[submodule "shell/test/test_helper/bats-support"]
|
|
||||||
path = shell/test/test_helper/bats-support
|
|
||||||
url = https://github.com/bats-core/bats-support.git
|
|
||||||
[submodule "shell/test/test_helper/bats-assert"]
|
|
||||||
path = shell/test/test_helper/bats-assert
|
|
||||||
url = https://github.com/bats-core/bats-assert.git
|
|
||||||
25
shell/cat.sh
25
shell/cat.sh
|
|
@ -1,25 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# cat for Markdown in my ultralight writing database
|
|
||||||
# wherein concatenated filed need a "\n---\n\n" between them.
|
|
||||||
|
|
||||||
#############################################################################
|
|
||||||
# cat with file headers | replace with section string | remove first instance
|
|
||||||
|
|
||||||
# NOTE: only need to add one newline, because the header inserted by tail
|
|
||||||
# implicitly adds two : \n==> foo <==\n
|
|
||||||
tail -n +1 "$@" | sed 's/^==> .* <==$/---\n/g' | tail -n +3
|
|
||||||
|
|
||||||
|
|
||||||
##############################
|
|
||||||
# failed approaches
|
|
||||||
|
|
||||||
# find . -type f -name "$@" -exec cat {} \; -printf "\n---\n\n"
|
|
||||||
|
|
||||||
# this leaves one trailing, could cat the whole thing and then cut the tail off
|
|
||||||
# MDCATALL=`for i in "$@";
|
|
||||||
# do
|
|
||||||
# cat $i
|
|
||||||
# echo '\n---\n\n'
|
|
||||||
# done`
|
|
||||||
# echo $MDCATALL | head -n +2
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Get the last file name of any numbered series of text files and open it with emacs.
|
|
||||||
|
|
||||||
# file format:
|
|
||||||
# in regex terms:
|
|
||||||
# [0-9]+\.[.*\.]*md|txt
|
|
||||||
# in plain terms:
|
|
||||||
# [leading numbers with consistent width].[optional string descriptor and . separator][md|txt]
|
|
||||||
|
|
||||||
UMALLFILES=`ls | grep -E '^[[:digit:]].*\.(md|txt)'`
|
|
||||||
UMLASTSTATUS=$?
|
|
||||||
UMLASTFILE=''
|
|
||||||
|
|
||||||
if [ "$UMLASTSTATUS" -ne 0 ]; then
|
|
||||||
UMLASTFILE="$UMDEFAULTINIT"
|
|
||||||
else
|
|
||||||
# NOTE: if var isn't quoted echo will change newlines to spaces
|
|
||||||
UMLASTFILE=`echo "$UMALLFILES" | tail -n 1`
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$UMDISABLEEMACS" = true ] || [ "$UMTEST" = true ] ; then
|
|
||||||
echo $UMLASTFILE
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "emacsclient -n $UMLASTFILE"
|
|
||||||
emacsclient -n $UMLASTFILE
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
# awk script to increment the digits, preserve the zero prefix, add string descriptor if supplied, and add back extension
|
|
||||||
|
|
||||||
BEGIN {
|
|
||||||
# Builtin variable, "field seperator", blank by default. The neatness of this is
|
|
||||||
# the main reason I use awk to parse the filename.
|
|
||||||
FS = "."
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
# another reason why awk is great for this:
|
|
||||||
newnum = $1 + 1
|
|
||||||
|
|
||||||
# could I do this with a simpler regex to select all leading zeros?
|
|
||||||
nzeros = length($1) - length(int(newnum))
|
|
||||||
leadingzeros = ""
|
|
||||||
if (nzeros > 0)
|
|
||||||
for (i = 1; i <= nzeros; i++)
|
|
||||||
leadingzeros = sprintf("%s%s", leadingzeros, "0")
|
|
||||||
|
|
||||||
if (nzeros > 0)
|
|
||||||
newnum = sprintf("%s%s", leadingzeros, newnum)
|
|
||||||
|
|
||||||
# start by prefixing the number, now with leading zeros
|
|
||||||
finalstr = newnum
|
|
||||||
|
|
||||||
# allow an arg input to fill out descriptor string.
|
|
||||||
if (arg != "")
|
|
||||||
finalstr = sprintf("%s.%s", finalstr, arg)
|
|
||||||
|
|
||||||
# append last field by default
|
|
||||||
finalstr = sprintf("%s.%s", finalstr, $NF)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
END {
|
|
||||||
print finalstr
|
|
||||||
}
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Generate the next filename in any numbered series of text files and open with emacs.
|
|
||||||
|
|
||||||
# Usage:
|
|
||||||
# $ next [descriptor] [tag]
|
|
||||||
|
|
||||||
# Handles optional string descriptor and tag. Like this:
|
|
||||||
# $ ls
|
|
||||||
# 011.blah.md
|
|
||||||
#
|
|
||||||
# $ next foo
|
|
||||||
# 012.foo.md
|
|
||||||
#
|
|
||||||
# $ next foo bar
|
|
||||||
# 013.foo.md
|
|
||||||
#
|
|
||||||
# Which populates the file like this:
|
|
||||||
#
|
|
||||||
# # 13.foo.md
|
|
||||||
# : 2024.01.14
|
|
||||||
# + bar
|
|
||||||
#
|
|
||||||
# See https://git.bth.moi/bth/um#next
|
|
||||||
|
|
||||||
# NOTE: we only want the filename, not to run emacs yet.
|
|
||||||
LASTFILE=`UMDISABLEEMACS=true $UMBASEPATH/last.sh`
|
|
||||||
|
|
||||||
# NOTE: the optional $1 arg passed to awk with -v:
|
|
||||||
NEXTFILE=`echo $LASTFILE | awk -f $UMBASEPATH/next.awk -v arg=$1`
|
|
||||||
|
|
||||||
# tag is optional second arg to this script
|
|
||||||
if [ $2 ]; then
|
|
||||||
UMELISP=$(printf '(um-next "%s" "%s")' "$NEXTFILE" "$2")
|
|
||||||
else
|
|
||||||
UMELISP=$(printf '(um-next "%s")' "$NEXTFILE")
|
|
||||||
fi
|
|
||||||
|
|
||||||
# for testing and piping
|
|
||||||
# NOTE: bash booleans are such a pain, because they don't exist. https://stackoverflow.com/a/2953673
|
|
||||||
if [ "$UMNEXTPRINT" = true ]; then
|
|
||||||
# NOTE: printf instead of echo, because echo inserts a newline, and we pipe
|
|
||||||
# this back into elisp for um-next-shell:
|
|
||||||
printf $NEXTFILE
|
|
||||||
elif [ "$UMTEST" = true ]; then
|
|
||||||
echo $UMELISP
|
|
||||||
else
|
|
||||||
# NOTE: emacs won't accept piped input as a file name, so we use --eval to run
|
|
||||||
# um-next as elisp. Which also lets us add the header and tag.
|
|
||||||
emacsclient --eval "$UMELISP"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
# generates a string of "oldname newname" from 2 records, for use with mv. Main
|
|
||||||
# problem solved here generating the newname string using the number prefix and
|
|
||||||
# filetype affix.
|
|
||||||
|
|
||||||
BEGIN {
|
|
||||||
FS="."
|
|
||||||
oldname = ""
|
|
||||||
num = ""
|
|
||||||
ext = ""
|
|
||||||
newname = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
NR == 1 {
|
|
||||||
oldname = $0
|
|
||||||
num = $1
|
|
||||||
# important that this is the last field, not numbered, to allow for a file
|
|
||||||
# without a string descriptor.
|
|
||||||
ext = $NF
|
|
||||||
}
|
|
||||||
|
|
||||||
NR == 2 {
|
|
||||||
newname = sprintf("%s.%s.%s", num, $0, ext)
|
|
||||||
}
|
|
||||||
|
|
||||||
END {
|
|
||||||
print oldname, newname
|
|
||||||
}
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# rename : renames the string descriptor used in numbered series.
|
|
||||||
|
|
||||||
# Usage:
|
|
||||||
|
|
||||||
# > um rename 100.md foo
|
|
||||||
# or
|
|
||||||
# > um rename 100.foo.md bar
|
|
||||||
# or
|
|
||||||
# > um last | um rename baz
|
|
||||||
|
|
||||||
# is equivalent to:
|
|
||||||
# > mv 100.md 100.foo.md
|
|
||||||
# > mv 100.foo.md 100.bar.md
|
|
||||||
# > mv 100.bar.md 100.baz.md
|
|
||||||
|
|
||||||
# accept piped input
|
|
||||||
# https://unix.stackexchange.com/a/537581
|
|
||||||
if [[ ! -t 0 ]]; then
|
|
||||||
FROM=$(cat -)
|
|
||||||
TO=$1
|
|
||||||
else
|
|
||||||
FROM=$1
|
|
||||||
TO=$2
|
|
||||||
fi
|
|
||||||
|
|
||||||
# split the args by a newline so that awk reads them as separate "records"
|
|
||||||
mvcmd=`echo "$FROM
|
|
||||||
$TO" | awk -f $UMBASEPATH/rename.awk`
|
|
||||||
|
|
||||||
echo mv $mvcmd
|
|
||||||
|
|
||||||
mv $mvcmd
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# just list the files so we can pipe it.
|
|
||||||
grep -lE "\+ $@" *md
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 3d3f63d9772b98c88586ec0a66bd358a85d9b4a6
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# 001
|
|
||||||
: 2024.01.14
|
|
||||||
+ foo
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
# 002.blah
|
|
||||||
: 2024.01.14
|
|
||||||
+ foo
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit e2d855bc78619ee15b0c702b5c30fb074101159f
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 9bf10e876dd6b624fe44423f0b35e064225f7556
|
|
||||||
|
|
@ -1,124 +0,0 @@
|
||||||
setup() {
|
|
||||||
load 'test_helper/bats-support/load'
|
|
||||||
load 'test_helper/bats-assert/load'
|
|
||||||
|
|
||||||
# get the containing directory of this file
|
|
||||||
# use $BATS_TEST_FILENAME instead of ${BASH_SOURCE[0]} or $0,
|
|
||||||
# as those will point to the bats executable's location or the preprocessed file respectively
|
|
||||||
DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )"
|
|
||||||
# make executables visible to PATH
|
|
||||||
# FIXME: why isn't this working?
|
|
||||||
# PATH="$DIR/../:$PATH"
|
|
||||||
# commands depend on being in the journal/ path.
|
|
||||||
export ORIGPWD=`pwd`
|
|
||||||
cd $DIR/mockjournal
|
|
||||||
# so that we can run next.sh without dealing with emacsclient.
|
|
||||||
export UMTEST=true
|
|
||||||
}
|
|
||||||
|
|
||||||
teardown() {
|
|
||||||
export UMTEST=false
|
|
||||||
cd $ORIGPWD
|
|
||||||
git restore $DIR/mockjournal
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "um usage" {
|
|
||||||
run um
|
|
||||||
assert_output 'usage: um (next|last|cat|rename|tag)'
|
|
||||||
}
|
|
||||||
|
|
||||||
um_next_awk() {
|
|
||||||
echo "$1" | awk -f $DIR/../next.awk -v arg="$2"
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "next.awk" {
|
|
||||||
run um_next_awk 01.md
|
|
||||||
assert_output '02.md'
|
|
||||||
|
|
||||||
run um_next_awk 01.md foo
|
|
||||||
assert_output '02.foo.md'
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "um next empty" {
|
|
||||||
run um next
|
|
||||||
assert_output --partial '100.md'
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "um next empty elisp" {
|
|
||||||
run um next
|
|
||||||
assert_output '(um-next "100.md")'
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "um next descriptor" {
|
|
||||||
run um next foo
|
|
||||||
assert_output --partial '100.foo.md'
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "um next descriptor tag" {
|
|
||||||
run um next foo bar
|
|
||||||
assert_output '(um-next "100.foo.md" "bar")'
|
|
||||||
}
|
|
||||||
|
|
||||||
# elisp handles this now:
|
|
||||||
@test "um next descriptor +" {
|
|
||||||
run um next foo +
|
|
||||||
assert_output '(um-next "100.foo.md" "+")'
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "um last" {
|
|
||||||
run um last
|
|
||||||
assert_output '099.poo.md'
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "um last empty" {
|
|
||||||
cd foo
|
|
||||||
run um last
|
|
||||||
assert_output '000.md'
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "um cat" {
|
|
||||||
run um cat 001.md 002.blah.md
|
|
||||||
assert_output '# 001
|
|
||||||
: 2024.01.14
|
|
||||||
+ foo
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# 002.blah
|
|
||||||
: 2024.01.14
|
|
||||||
+ foo'
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "um rename" {
|
|
||||||
run um rename 001.md blah
|
|
||||||
run ls 001*
|
|
||||||
assert_output '001.blah.md'
|
|
||||||
mv 001.blah.md 001.md
|
|
||||||
}
|
|
||||||
|
|
||||||
# this doesn't work because bats doesn't handle stdin the way a tty does.
|
|
||||||
# @test "um rename piped" {
|
|
||||||
# run um last | um rename gloo
|
|
||||||
# run ls 099*
|
|
||||||
# assert_output '099.gloo.md'
|
|
||||||
# mv 099.gloo.md 099.poo.md
|
|
||||||
# }
|
|
||||||
|
|
||||||
um_rename_awk() {
|
|
||||||
echo "$1
|
|
||||||
$2" | awk -f $DIR/../rename.awk
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "rename.awk" {
|
|
||||||
run um_rename_awk 01.md foo
|
|
||||||
assert_output '01.md 01.foo.md'
|
|
||||||
|
|
||||||
run um_rename_awk 01.foo.md bar
|
|
||||||
assert_output '01.foo.md 01.bar.md'
|
|
||||||
}
|
|
||||||
|
|
||||||
@test "um tag" {
|
|
||||||
run um tag foo
|
|
||||||
assert_output '001.md
|
|
||||||
002.blah.md'
|
|
||||||
}
|
|
||||||
32
shell/um
32
shell/um
|
|
@ -1,32 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# export so that we can use it in subscripts.
|
|
||||||
export UMBASEPATH=`realpath $0 | xargs dirname`
|
|
||||||
# TODO: load a config file?
|
|
||||||
export UMDEFAULTINIT='000.md'
|
|
||||||
|
|
||||||
# TODO: decide if getopts would be better. positional args supposed to be bad.
|
|
||||||
# https://stackoverflow.com/a/28466267
|
|
||||||
|
|
||||||
# catch first arguments with $1
|
|
||||||
case "$1" in
|
|
||||||
next)
|
|
||||||
$UMBASEPATH/next.sh $2 $3
|
|
||||||
;;
|
|
||||||
last)
|
|
||||||
$UMBASEPATH/last.sh
|
|
||||||
;;
|
|
||||||
cat)
|
|
||||||
# all args but first
|
|
||||||
$UMBASEPATH/cat.sh "${@:2}"
|
|
||||||
;;
|
|
||||||
rename)
|
|
||||||
$UMBASEPATH/rename.sh $2 $3
|
|
||||||
;;
|
|
||||||
tag)
|
|
||||||
$UMBASEPATH/tag.sh $2
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "usage: um (next|last|cat|rename|tag)"; exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
Loading…
Reference in a new issue