Wymagania:

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