aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/commands.lisp14
-rw-r--r--lisp/queries.lisp9
2 files changed, 23 insertions, 0 deletions
diff --git a/lisp/commands.lisp b/lisp/commands.lisp
index e92c8b2..2e406ad 100644
--- a/lisp/commands.lisp
+++ b/lisp/commands.lisp
@@ -128,3 +128,17 @@ remove all tags from bookmark."
Print the version number and exit."
(format t "clark version ~A~%" version))
+
+(defcommand tags (&optional (num 0))
+ "List a number of or all tags."
+ "Usage: clark tags [<num>]
+
+Print a list of tags and the number of bookmarks tagged with it
+ordered by that number. If NUM is given, only print the first NUM
+tags."
+ (let ((num (if (integerp num) num (parse-integer num)))
+ (counter 1))
+ (dolist (tag (tag-list))
+ (format t "~30A~10D~%" (car tag) (cadr tag))
+ (if (> (incf counter) num 0)
+ (return)))))
diff --git a/lisp/queries.lisp b/lisp/queries.lisp
index 0ffb302..a7bdc69 100644
--- a/lisp/queries.lisp
+++ b/lisp/queries.lisp
@@ -141,3 +141,12 @@
(execute-to-list
*db* (sql select "url"
from "bookmark"))))
+
+(defun tag-list ()
+ "Get a list of all tags stored."
+ (execute-to-list
+ *db* (sql select "name, COUNT(bookmark_id)"
+ from "tag"
+ join "bookmark_tag" on ("tag_id = tag.ROWID")
+ group by "tag.ROWID"
+ order by "COUNT(bookmark_id)" desc)))