]> Sergey Matveev's repositories - zk.zsh.git/commitdiff
Ability to link to directory's index
authorSergey Matveev <stargrave@stargrave.org>
Fri, 18 Mar 2022 16:13:00 +0000 (19:13 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 18 Mar 2022 16:13:00 +0000 (19:13 +0300)
README
zk.zsh

diff --git a/README b/README
index 206b6dd949ec80ec0761d014eb01aab822c00ecd..1dfb2c79e5c0d5cf7bf7b66e15fad5d1c5425d3c 100644 (file)
--- a/README
+++ b/README
@@ -13,6 +13,7 @@ zk.zsh -- zettelkästen/wiki/static website helper/generator
   highlight them with:
     syntax region zkLink start="\[\S" end="\S]"
     highlight link zkLink String
+* Link to the directory's index can be made with [Dir/]
 * Use Vim's filename completion (:help compl-filename) to
   complete directories and filenames in them
 * fzf (https://github.com/junegunn/fzf) related tools can be
diff --git a/zk.zsh b/zk.zsh
index b6ac72d05e46e06d663e437ca9a5a41ddf2459e5..93ad39d6cc3995bfe95897fa3704e6f769faee67 100755 (executable)
--- a/zk.zsh
+++ b/zk.zsh
@@ -35,8 +35,8 @@ for p (**(.)) {
     pages[$p]=${mtime[1]}
     sizes[$p]=${size[1]}
 }
-typeset -a cats
-for p (**(/)) cats=($p $cats)
+typeset -A cats
+for p (**(/)) cats[$p]=1
 
 zmodload zsh/mapfile
 zmodload -F zsh/files b:zf_mkdir
@@ -62,6 +62,10 @@ for p (${(k)pages}) {
     for w (${=mapfile[$p]}) {
         [[ $w =~ "\[([^] ]+)\]" ]] || continue
         w=${match[1]}
+        [[ ( $w =~ "/$" ) && ( ${cats[$w[1,-2]]} ) ]] && {
+            ws=($ws $w)
+            continue
+        }
         [[ ${pages[$w]} ]] || {
             [[ $ZK_SHOW_MISSING ]] && print "missing $w"
             continue
@@ -114,6 +118,7 @@ genHTML() {
         data=${data//>/&gt;}
         for p ($_links) {
             getrel $page $p
+            [[ -d $p ]] && REPLY=$REPLY/index
             data="${data//\[${p}\]/<a href=\"${REPLY}.html\">[$p]</a>}"
         }
         data="<!DOCTYPE html>
@@ -153,13 +158,13 @@ genIndex() {
     local p
     local entries=()
     local _links=()
-    typeset -aU cats=()
+    typeset -aU _cats=()
     local curdepth=${#${(s:/:)1}}
     (( curdepth = curdepth + 1 ))
     for p (${(k)pages[(I)$1*]}) {
         case ${#${(As:/:)p}} in
         ($curdepth) _links=($p $_links) ;;
-        ( $(( $curdepth + 1 )) ) cats=(${1}${${p#$1}%%/*} $cats) ;;
+        ( $(( $curdepth + 1 )) ) _cats=(${1}${${p#$1}%%/*} $_cats) ;;
         (*) continue ;;
         esac
     }
@@ -171,14 +176,23 @@ genIndex() {
         print "<li><a href=\"${REPLY}.html\">$p</a> <sup>${pages[$p]}</sup> (${sizes[$p]} bytes)</li>"
     }
     print "</ul>"
-    if [[ $cats ]]; then
+    if [[ $_cats ]]; then
         print "<hr/>Subdirectories:<ul>"
-        for p (${(oi)cats}) {
+        for p (${(oi)_cats}) {
             getrel $page $p/index
             print "<li><a href=\"${REPLY}.html\">$p</a></li>"
         }
         print "</ul>"
     fi
+    local bs=(${(oi)=${backs[$1]}})
+    if [[ $bs ]]; then
+        print "<hr/>Backlinks:<ul>"
+        for p ($bs) {
+            getrel $page $p
+            print "<li><a href=\"${REPLY}.html\">$p</a> <sup>${pages[$p]}</sup></li>"
+        }
+        print "</ul>"
+    fi
     print "</body></html>"
 }
 
@@ -193,9 +207,9 @@ case $1 in
         genHTML $p > $2/$p.html
         touch -r $p $2/$p.html
     }
-    for p ($cats) genIndex $p/ > $2/$p/index.html
+    for p (${(k)cats}) genIndex $p/ > $2/$p/index.html
     genIndex "" > $2/index.html
-    for p ("" $cats) touch -d ${now/ /T} $2/$p/index.html
+    for p ("" ${(k)cats}) touch -d ${now/ /T} $2/$p/index.html
     ;;
 (*) usage ;;
 esac