Fish · 2146 bytes Raw Blame History
1 function viewnotes --description 'fzf-pick a note from ~/GithubOrgs/tenseleyFlow/ndotfiles/notes and view it'
2 set -l NOTES_DIR ~/GithubOrgs/tenseleyFlow/ndotfiles/notes
3 if test (count $argv) -gt 0
4 set NOTES_DIR $argv[1]
5 end
6
7 if not test -d $NOTES_DIR
8 echo "Directory not found: $NOTES_DIR" >&2
9 return 1
10 end
11
12 # Choose a viewer by preference
13 set -l viewer ''
14 for v in md-tui glow mdcat mdless mdp bat less
15 if type -q $v
16 set viewer $v
17 break
18 end
19 end
20 if test -z "$viewer"
21 echo "No suitable markdown viewer found (md-tui/glow/mdcat/mdless/mdp/bat/less)." >&2
22 echo "Install one (e.g., 'sudo pacman -S glow' or 'paru -S md-tui')." >&2
23 return 1
24 end
25
26 # Build preview command for fzf
27 set -l preview ''
28 if type -q glow
29 set preview 'glow -p --style dark --width 0 {}'
30 else if type -q bat
31 set preview 'bat --paging=never --style=plain --language=markdown {}'
32 else
33 set preview 'sed -n "1,200p" {}'
34 end
35
36 # Collect .md files; use fd if present for speed
37 set -l files
38 if type -q fd
39 set files (fd -t f -e md . $NOTES_DIR | sort)
40 else
41 set files (command find $NOTES_DIR -type f -name '*.md' | sort)
42 end
43
44 if test (count $files) -eq 0
45 echo "No .md files found in $NOTES_DIR" >&2
46 return 1
47 end
48
49 # fzf pick
50 set -l pick (printf '%s\n' $files | fzf --prompt='notes> ' --bind='alt-p:toggle-preview' --preview="$preview" --height=80% --layout=reverse --border --preview-window='right,60%,border')
51 if test -z "$pick"
52 return 0
53 end
54
55 # View according to the chosen tool
56 switch $viewer
57 case 'md-tui'
58 md-tui "$pick"
59 case 'glow'
60 glow -p --style dark --width 0 "$pick"
61 case 'mdcat'
62 mdcat "$pick" | less -R
63 case 'mdless'
64 mdless "$pick"
65 case 'mdp'
66 mdp "$pick"
67 case 'bat'
68 bat --paging=always --style=plain --language=markdown "$pick"
69 case 'less'
70 less -R "$pick"
71 end
72 end