On Saturday, September 14, 2019 at 1:58:57 PM UTC-7, btheado wrote:
>
> I'm currently using leo as my main note-taking application and I find it
> very useful to have auto-saving, so I enabled the auto-save module.
>
> I felt a little nervous about using auto-save and decided I wanted a git
> commit on every save so I would have a history in case anything goes wrong.
>
>
> Hi Brian,
I have been using bash and fossil to do something similar.
I start Leo using a bash script.
#!/bin/bash
cd ~/leo-editor
git pull
cd /working/MEGA/leo-files
./rerun2 ./push &
python3 ~/leo-editor/launchLeo.py $1 $2 $3
I treat Leo as an abstraction layer that sits on top of my filesystem and
all of my work in external files. I keep all of my .leo files under version
control in the same directory. Every time I start a new session, I pull
from git (pretty much always from git checkout devel).
I then change to the leo-files directory which becomes the working
directory. I run rerun2 which is a bash script I found online that monitors
all the files in the current directory and will run a command of my choice
with every change. I run this detached and then run Leo.
#!/usr/bin/env bash
# Events that occur within this time from an initial one are ignored
ignore_secs=0.25
clear='false'
verbose='false'
function usage {
echo "Rerun a given command every time filesystem changes are detected."
echo ""
echo "Usage: $(basename $0) [OPTIONS] COMMAND"
echo ""
echo " -c, --clear Clear the screen before each execution of
COMMAND."
echo " -v, --verbose Print the name of the files that changed to
cause"
echo " each execution of COMMAND."
echo " -h, --help Display this help and exit."
echo ""
echo "Run the given COMMAND, and then every time filesystem changes are"
echo "detected in or below the current directory, run COMMAND again."
echo "Changes within $ignore_secs seconds are grouped into one."
echo ""
echo "This is useful for running commands to regenerate visual output
every"
echo "time you hit [save] in your editor. For example, re-run tests, or"
echo "refresh markdown or graphviz rendering."
echo ""
echo "COMMAND can only be a simple command, ie. \"executable arg
arg...\"."
echo "For compound commands, use:"
echo ""
echo " rerun bash -c \"ls -l | grep ^d\""
echo ""
echo "Using this it's pretty easy to rig up ad-hoc GUI apps on the fly."
echo "For example, every time you save a .dot file from the comfort of"
echo "your favourite editor, rerun can execute GraphViz to render it to"
echo "SVG, and refresh whatever GUI program you use to view that SVG."
echo ""
echo "COMMAND can't be a shell alias, and I don't understand why not."
}
while [ $# -gt 0 ]; do
case "$1" in
-c|--clear) clear='true';;
-v|--verbose) verbose='true' ;;
-h|--help) usage; exit;;
*) break;;
esac
shift
done
function execute() {
if [ $clear = "true" ]; then
clear
fi
if [ $verbose = "true" ]; then
if [ -n "$changes" ]; then
echo -e "Changed: $(echo -e $changes | cut -d' ' -f2 | sort -u
| tr '\n' ' ')"
changes=""
fi
echo "$@"
fi
"$@"
}
execute "$@"
ignore_until=$(date +%s.%N)
inotifywait --quiet --recursive --monitor --format "%e %w%f" \
--event modify --event move --event create --event delete \
--exclude '__pycache__' --exclude '.cache' \
. | while read changed
do
changes="$changes\n$changed"
if [ $(echo "$(date +%s.%N) > $ignore_until" | bc) -eq 1 ] ; then
ignore_until=$(echo "$(date +%s.%N) + $ignore_secs" | bc)
( sleep $ignore_secs ; execute "$@" ) &
fi
done
The push script is pretty straight forward and could be easily modified to
use git instead of fossil.
#!/bin/bash
fossil add .
fossil commit . -m "Autocommit"
Since rerun2 is still part of the console session it closes when I close
Leo which looks after having it hang around clutttering up the joint.
This might be a little tighter than the method you use.
Chris
--
You received this message because you are subscribed to the Google Groups
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/leo-editor/3ba51137-7d24-404f-b5f9-c33859bc7aa6%40googlegroups.com.