Add random command
This command simply prints a random URL. A tag may be specified to limit the search to that tag. In the Conkeror module this command immediately loads the random bookmark in the current buffer. - js/clark.js: If `error' is empty, return the value of `data'. This makes it easier for some commands to use the result of the command. Add `clark-random' to `clark_keymap'.
This commit is contained in:
parent
9badf67e27
commit
9e6199a5aa
5 changed files with 83 additions and 2 deletions
|
@ -118,6 +118,12 @@ as when no commands are given, but filtered by either of these
|
|||
conditions.
|
||||
@end deffn
|
||||
|
||||
@deffn Command random [TAG]
|
||||
Look through the database for a random bookmark. If @var{tag} is
|
||||
specified, limit the results to bookmarks having the given tag. Simply
|
||||
prints the url of the selected bookmark.
|
||||
@end deffn
|
||||
|
||||
@node Management, Miscellaneous, Querying, Usage
|
||||
@section Maintaining bookmarks in the database.
|
||||
|
||||
|
|
19
js/clark.js
19
js/clark.js
|
@ -264,6 +264,22 @@ function clark_set_tags(I) {
|
|||
interactive("clark-set-tags", "Replace the tags for the bookmark of"
|
||||
+ " the current URL.", clark_set_tags);
|
||||
|
||||
function clark_random(I)
|
||||
{
|
||||
check_buffer(I.buffer, content_buffer);
|
||||
|
||||
let tag = yield I.minibuffer.read($prompt="tag: ");
|
||||
let command = clark_program + ' random';
|
||||
if (tag != "")
|
||||
command += ' ' + tag;
|
||||
|
||||
let result = yield clark_shell_command(command);
|
||||
|
||||
if (result)
|
||||
I.buffer.load(result);
|
||||
}
|
||||
interactive("clark-random", "Open a random bookmark", clark_random);
|
||||
|
||||
function clark_shell_command(command)
|
||||
{
|
||||
let data = "", error = "";
|
||||
|
@ -278,11 +294,12 @@ function clark_shell_command(command)
|
|||
)}]
|
||||
);
|
||||
|
||||
yield co_return(error == "");
|
||||
yield co_return(error == "" && data);
|
||||
}
|
||||
|
||||
define_keymap("clark_keymap");
|
||||
|
||||
define_key(clark_keymap, "#", "clark-random");
|
||||
define_key(clark_keymap, "?", "clark-exists-p");
|
||||
define_key(clark_keymap, "a", "clark-add");
|
||||
define_key(clark_keymap, "A", "clark-add-link");
|
||||
|
|
|
@ -30,4 +30,5 @@
|
|||
:serial t
|
||||
:depends-on (:sqlite)
|
||||
:components ((:file "package")
|
||||
(:file "clark")))
|
||||
(:file "clark")
|
||||
(:file "queries")))
|
||||
|
|
|
@ -330,6 +330,17 @@ list of tags."
|
|||
(clear-tags url)
|
||||
(add-tags url tags))
|
||||
|
||||
(defun random-item (lst)
|
||||
(nth (random (length lst) (make-random-state t)) lst))
|
||||
|
||||
(defcommand random (&optional tag)
|
||||
"Pick a random bookmark, possibly from TAG."
|
||||
"Usage: clark random [<tag>]
|
||||
|
||||
Get a random bookmark. If TAG is given limit the result to a bookmark
|
||||
having the tag TAG."
|
||||
(format t "~a~%" (random-item (url-list tag))))
|
||||
|
||||
(defcommand version ()
|
||||
"Show version."
|
||||
"Usage: clark version
|
||||
|
|
46
lisp/queries.lisp
Normal file
46
lisp/queries.lisp
Normal file
|
@ -0,0 +1,46 @@
|
|||
;; Copyright (C) 2013 Tom Willemsen <tom at ryuslash dot org>
|
||||
|
||||
;; This file is part of CLark
|
||||
|
||||
;; CLark is free software: you can redistribute it and/or modify it
|
||||
;; under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; CLark is distributed in the hope that it will be useful, but
|
||||
;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
;; General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with CLark. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(in-package :org.ryuslash.clark)
|
||||
|
||||
(defun url-list-no-tag ()
|
||||
"Get a list of all URLs stored."
|
||||
(mapcar #'car
|
||||
(execute-to-list
|
||||
*db* (sql select "url"
|
||||
from "bookmark"))))
|
||||
|
||||
(defun url-list-for-tag (tag)
|
||||
"Get a list of all the stored URLs with tag TAG."
|
||||
(mapcar
|
||||
#'car
|
||||
(execute-to-list
|
||||
*db* (sql select "url"
|
||||
from "bookmark"
|
||||
where ? in (select "name"
|
||||
from "tag"
|
||||
join "bookmark_tag" on ("tag_id = tag.rowid")
|
||||
where "bookmark_id" = "bookmark.rowid"))
|
||||
tag)))
|
||||
|
||||
(defun url-list (&optional tag)
|
||||
"Get a list of URLs, possibly with tag TAG."
|
||||
(if tag
|
||||
(url-list-for-tag tag)
|
||||
(url-list-no-tag)))
|
Loading…
Reference in a new issue