Skrypt zainspirowany https://github.com/nickjj/notes/blob/master/notes
Wymagania:
-
ripgrep
-
skim (sk)
-
fzf
-
preview.sh część pluginu fzf.vim https://github.com/junegunn/fzf.vim/blob/master/bin/preview.sh
-
vim
-
plugin Vimwiki
-
xclip
Opis użycia:
W przypadku wyszukiwania z użyciem parametrów -s
i -f
, istnieje skrót Ctrl+p,
który uruchamia skrypt preview.sh
, służący do podglądania szukanych notatek.
Skrypt preview.sh
jest częścią pluginu fzf.vim
.
notes treść notatki -- dodaje treść notatki z wiersza poleceń xclip -o | notes -- wkleja zawartość schowka do notatki notes -- otwiera w edytorze dzisiejszą notatkę notes -s -- przeszukuje wszystkie notatek w $NOTES_DIRECTORY notes -f -- wyszukuje plików w $NOTES_DIRECTORY notes -d -- usuwa dzisiejszy notes notes -g -- generuje INDEKS dziennika $NOTES_DIARY_INDEX notes -i -- przechodzi do edycji $NOTES_DIARY_INDEX
#!/bin/bash
# Skrypt zarządzający notatkami, dodatek do pluginu Vimwiki.
# Nie rozróżnia wielkości liter np. w funkcji case in.
shopt -s nocasematch
# Ustawnienie zmiennych
NOTES_DIRECTORY=~/vimwiki/diary
NOTES_FILE=$(date +%Y-%m-%d).md
NOTES_PATH=$NOTES_DIRECTORY/$NOTES_FILE
NOTES_EDITOR=vim
NOTES_HEADER="# $(date +%Y-%m-%d)"
NOTES_TIME="$(date +%T)"
NOTES_DIARY_INDEX=$NOTES_DIRECTORY/diary.md
PREVIEW_SCRIPT=~/bin/preview.sh
BASENAME=$(basename $0)
function HELP() {
echo
echo "Użycie:"
echo
echo " $ $BASENAME treść notatki -- dodaje treść notatki z wiersza poleceń"
echo " $ xclip -o | $BASENAME -- wkleja zawartość schowka do notatki"
echo " $ $BASENAME -- otwiera w edytorze dzisiejszą notatkę"
echo " $ $BASENAME -s -- przeszukuje wszystkie notatek w $NOTES_DIRECTORY"
echo " $ $BASENAME -f -- wyszukuje plików w $NOTES_DIRECTORY"
echo " $ $BASENAME -d -- usuwa dzisiejszy notes"
echo " $ $BASENAME -g -- generuje INDEKS dziennika $NOTES_DIARY_INDEX"
echo " $ $BASENAME -i -- przechodzi do edycji $NOTES_DIARY_INDEX"
echo
exit 0
}
function DELETE() {
if [ -f $NOTES_PATH ]; then
read -p "Czy chcesz usunąć plik notatki ${NOTES_PATH} [t/N]: " ANS
case $ANS in
t|y)
rm ${NOTES_PATH}
exit 0
;;
n)
exit 0
;;
*)
exit 0
;;
esac
else
echo "Brak pliku ${NOTES_PATH}."
exit 0
fi
}
function FIND() {
cd $NOTES_DIRECTORY
SEARCH=$(sk --ansi -i --bind "ctrl-p:toggle-preview" \
--preview "$PREVIEW_SCRIPT {}" --preview-window=down:50%:hidden)
$NOTES_EDITOR $NOTES_DIRECTORY/$SEARCH
exit 0
}
function SEARCH() {
cd $NOTES_DIRECTORY
SEARCH=$(sk --ansi -i -c 'rg --color=always --line-number "{}"' \
--bind "ctrl-p:toggle-preview" --preview "$PREVIEW_SCRIPT {}" \
--preview-window=down:50%:hidden)
FILE=$(echo $SEARCH | cut -d : -f 1)
LINE=$(echo $SEARCH | cut -d : -f 2)
echo $FILE $LINE
[[ $FILE ]] && $NOTES_EDITOR $NOTES_DIRECTORY/$FILE +$LINE
exit 0
}
function GENERUJ_INDEX() {
$NOTES_EDITOR -c :VimwikiDiaryGenerateLinks $NOTES_DIARY_INDEX -c :wq
exit 0
}
function EDIT_INDEX() {
$NOTES_EDITOR $NOTES_DIARY_INDEX
exit 0
}
case "$1" in
-g)
GENERUJ_INDEX
;;
-s)
SEARCH
;;
-f)
FIND
;;
-d)
DELETE
;;
-i)
EDIT_INDEX
;;
-h|--help)
HELP
;;
esac
if [ ! -f $NOTES_PATH ]; then
printf "%s\n\n" "$NOTES_HEADER" > $NOTES_PATH
fi
if [ ${#} -eq 0 ]; then
if [ -p "/dev/stdin" ]; then
(printf "%s %s " "-" "${NOTES_TIME}"; cat) >> "${NOTES_PATH}"
else
eval "${NOTES_EDITOR}" "${NOTES_PATH}"
fi
else
printf "%s %s %s\n" "-" "${NOTES_TIME}" "${*}" >> ${NOTES_PATH}
fi
Date: 2020-10-24T16:44:02+02:00 |