Home

Awesome

Quicksearch

Quicksearch is a search-engine-interface for Common Lisp. The goal of Quicksearch is to find a CL library quickly. For example, if you want to find libraries about json, just type (qs:? "json") at the REPL.

The function quicksearch searches for CL projects on Quicklisp, Cliki, GitHub and BitBucket, then outputs results in the REPL. The function ? is an abbreviation wrapper for quicksearch.

quicksearch accepts arguments in a long form: :url, :description, etc, and ? has the same in their short form: :u, :d, and they are agglutinated: (qs:? :gq) to limit the search to :github and :quicklisp.

Quicksearch was created by @tkych: https://github.com/tkych/quicksearch.

About this fork: see our CHANGELOG.

Depends-on

Installation

cl-test-grid results:

Auto:
  1. CL-REPL> (ql:quickload :quicksearch)
Manual:
  1. SHELL$ git clone https://github.com/tkych/quicksearch.git
  2. CL-REPL> (push #p"/path-to-quicksearch/quicksearch/" asdf:*central-registry*)
  3. CL-REPL> (ql:quickload :quicksearch) or (asdf:load-system :quicksearch)

Examples

Simple search:
CL-REPL> (qs:? "crypt") ;<=> (qs:quicksearch "crypt")

SEARCH-RESULTS: "crypt"

 Quicklisp
 ---------
  crypt
      http://beta.quicklisp.org/archive/cl-crypt/2012-05-20/cl-crypt-20120520-git.tgz
      http://quickdocs.org/cl-crypt/
  crypto-shortcuts
      http://beta.quicklisp.org/archive/crypto-shortcuts/2020-10-16/crypto-shortcuts-20201016-git.tgz
      http://quickdocs.org/crypto-shortcuts/
  ironclad/kdf/bcrypt
      http://beta.quicklisp.org/archive/ironclad/2022-11-06/ironclad-v0.58.tgz
      http://quickdocs.org/ironclad/

 […]

 Cliki
 -----
 ARC4
     http://www.cliki.net/ARC4
     A Common Lisp implementation of ARC4 (trademark: RC4), a stream cipher,
     can be found below
 JARW
     http://www.cliki.net/JARW
     Dr John AR Williams' utilities
 VLM_on_Linux
     http://www.cliki.net/VLM_on_Linux
     This page gives some additional hints on running the Symbolics Virtual
     Lisp Machine (VLM) port to

 GitHub
 ------
    crypto-shortcuts
        https://github.com/Shinmera/crypto-shortcuts
        Collection of common cryptography functions
    cl-crypt
        https://github.com/renard/cl-crypt
        Common-Lisp implementation of unix crypt function
    cl-crypto
        https://github.com/billstclair/cl-crypto
        Pure lisp crypto, written from specs
    cryptopoem
        https://github.com/daniel-cussen/cryptopoem
        Analysis for Virgil's cryptographic epic poem, the Aeneid

  […]

T
URL, description:

Quicksearch printed the projects' short description and their URL by default.

To not print them, set their variables to NIL: *url-print?* and *description-print?*.

CL-REPL> (qs:? "crypt") ;<=> (qs:quicksearch "crypt" :description t :url t)
Null result:
CL-REPL> (qs:? "supercalifragilisticexpialidocious") ;<=> (qs:quicksearch "supercalifragilisticexpialidocious")
NIL
Search targets, max printed projects

You can use long and short parameters to specify where to search.

Quicksearch defaults to GitHub, Quicklisp, Cliki and bitbucket.

Only search on GitHub with a short :g option, and limit the number of printed results to 4:

CL-REPL> (qs:? "crypt" :g 4) ;<=> (qs:quicksearch "crypt"
                             ;                    :cut-off 4
                             ;                    :quicklisp nil :cliki nil :bitbucket nil)

SEARCH-RESULTS: "crypt"
=======================

 GitHub
 ------
  cl-crypt
      https://github.com/renard/cl-crypt
  cl-crypto
      https://github.com/bgs100/cl-crypto
  cl-crypto
      https://github.com/billstclair/cl-crypto
  cryptography
      https://github.com/MorganBauer/cryptography
  .......> 2
T
Config:
CL-REPL> (qs:? "lisp-koans" 1) ;<=> (qs:quicksearch "lisp-koans"
                               ;                     :cut-off 1)

SEARCH-RESULTS: "lisp-koans"
============================

 GitHub
 ------
  lisp-koans
      https://github.com/google/lisp-koans
      Common Lisp Koans is a language learning exercise in the same vein as the
      ruby koans, python koans and others.   It is a port of the prior koans
      with some modifications to highlight lisp-specific features.  Structured
      as ordered groups of broken unit tests, the project guides the learner
      progressively through many Common Lisp language features.
  .......> 4
T

CL-REPL> (qs:config :maximum-columns-of-description 50)
Current maximum columns of description: 50
T

CL-REPL> (qs:? 'lisp-koans :du 1)

SEARCH-RESULTS: "lisp-koans"
============================

 GitHub
 ------
  lisp-koans
      https://github.com/google/lisp-koans
      Common Lisp Koans is a language learning
      exercise in the same vein as the ruby koans,
      python koans and others.   It is a port of
      the prior koans with some modifications to
      highlight lisp-specific features.
      Structured as ordered groups of broken unit
      tests, the project guides the learner
      progressively through many Common Lisp
      language features.
  .......> 4
T

Reference Manual

[function] QUICKSEARCH search-word &key :web :description :url :cut-off :quicklisp :cliki :github :bitbucket

QUICKSEARCH searches for CL projects with search-word in Quicklisp, Cliki, GitHub and BitBucket. search-word must be a string, number or symbol (symbol will be automatically converted into downcase-string).

Keywords:
Note: about spaces in the search term

[function] ? search-word &rest options

? is abbreviation wrapper for function QUICKSEARCH. search-word must be a string, number or symbol. options must be a non-negative integer (as Cut-Off) and/or some keywords which consists of some Option-Chars.

Examples:
(? "crypt")
<=>
(quicksearch "crypt" :description T :url T :cut-off 50
                     :quicklisp t :cliki t :github t :bitbucket t)

(? "crypt" :du 10)
<=>
(quicksearch "crypt" :description T :url T :cut-off 10
                     :quicklisp t :cliki t :github t :bitbucket t)

(? "crypt" 20 :g)
<=>
(quicksearch "crypt" :description T :url T :cut-off 20
                     :quicklisp nil :cliki nil :github T :bitbucket nil)
Options:

NOTE: we changed the default (2024-07) to print the short description and project URL, there is currently no keyword to not print them. Use the global variables or a CONFIG (?).

Note:

[function] CONFIG &key maximum-columns-of-description maximum-number-of-fetching-repositories cache-size clear-cache? threading? quicklisp-verbose?

Function CONFIG customizes printing, fetching or caching.

Keywords:
     CL-REPL> (qs:config :quicklisp-verbose? T)
     CL-REPL> (qs:? "json" :q)

     SEARCH-RESULTS: "json"

      Quicklisp: 2013-04-20   ;<- quicklisp version
       !cl-json               ;<- if library has installed via quicklisp, print prefix "!".
       !cl-json.test
       com.gigamonkeys.json   ;<- if not, none.
       json-template
       st-json
     T
Note:

If you would prefer permanent config, for example, add codes something like the following in the CL init file.

In .sbclrc for SBCL, ccl-init.lisp for CCL:

(ql:quickload :quicksearch)
(qs:config :maximum-columns-of-description 50
           :maximum-number-of-fetching-repositories 20
           :cache-size 2
           :threading? nil
           :quicklisp-verbose? t)

[special variable] *USER-AGENT*

*user-agent* tells the server who is requested (i.e. User-Agent header value). If you are embedding quicksearch in a larger application, you should change the value of *user-agent* to your application name and URL.

TODO

Author, License, Copyright