tenseleyflow/ndotfiles / b477778

Browse files

quick fzf note viewer

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
b477778b12b96eb753162425110bc1e67d97497d
Parents
51e4b87
Tree
173318c

1 changed file

StatusFile+-
A fish/functions/viewnotes.fish 72 0
fish/functions/viewnotes.fishadded
@@ -0,0 +1,72 @@
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