#:g1: quicksearchの紹介

Posted 2014-04-09 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の100日目です。

quicksearchとはなにか

 quicksearchは、Takaya OCHIAI氏作のCommon Lispのライブラリを検索するユーティリティです。

パッケージ情報

パッケージ名quicksearch
Quicklisp
参考サイト
Quickdocshttp://quickdocs.org/quicksearch

インストール方法

(ql:quickload :quicksearch)

 手元で試したところではqs::extract-github-repos内でエラーになるので適当に修正しました。
どうもflexi-streams:octets-to-stringに文字列が来てしまうのが原因のようです。

(defun response-string (response)
  #+#:Error-2014-04-08
  ;; This sequence can't be decoded using UTF-8 as it is too short.
  ;;  2 octets missing at the end.
  (flexi-streams:octets-to-string response :external-format :utf-8)
  #-#:Error-2014-04-08
  (etypecase response
    (STRING response)
    (VECTOR 
     (flexi-streams:octets-to-string response :external-format :utf-8))))

;; github api-v3 search (defun extract-github-repos (response) (let* ((jason (yason:parse (response-string response)))) (loop :for repo :in (gethash "repositories" jason) :unless (gethash "fork" repo) ;only master is displayed :collect (list (gethash "name" repo) (gethash "url" repo) (let ((desc (gethash "description" repo))) (unless (string= "" desc) desc))))))

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 使い方はシンプルで検索したいキーワードをquicksearchに渡すだけです。

(quicksearch:quicksearch "srfi")
;>>  
;>>  SEARCH-RESULTS: "srfi"
;>>  
;>>   Cliki
;>>    SRFI
;>>    cl-op
;>>    Riastradh's Lisp Style Rules [for Common Lisp]
;>>  
;>>   GitHub
;>>    srfi
;>>    srfi-19
;>>    srfi-99
;>>    srfi-28
;>>    srfi-23
;>>    srfi-87
;>>    srfi-13
;>>    srfi-74
;>>    srfi-89
;>>    srfi-25
;>>    srfi-64
;>>    srfi-42
;>>    srfi-97
;>>    srfi-61
;>>    srfi-60
;>>    srfi-106
;>>    srfi-66
;>>    srfi-101
;>>    srfi-17
;>>    srfi-51
;>>    srfi-35
;>>    srfi-6
;>>    srfi-43
;>>    srfi-0
;>>    srfi-10
;>>    srfi-40
;>>    srfi-45
;>>    srfi-27
;>>    srfi-9
;>>    srfi-4
;>>    srfi-90
;>>    srfi-31
;>>    srfi-78
;>>    srfi-compat
;>>    srfi-34
;>>    srfi-94
;>>    srfi-112
;>>    srfi-16
;>>    srfi-55
;>>    srfi-63
;>>    srfi-98
;>>    srfi-29
;>>    srfi-67
;>>    srfi-38
;>>    srfi-11
;>>    srfi-18
;>>    srfi-57
;>>    srfi-26
;>>    srfi-95
;>>    srfi-37
;>>    .......> 35
;>>  
;=>  CL:T

 REPLで利用することを想定しているのだと思いますが、qs:?でより短く書くことも可能です。
検索する対象も選択できますが、:gでgithub、:bでbitbucket、:cがCLiKi、:qがQuicklispです。:uで検索結果のURLを表示します。

(qs:? "clim" :u)
;>>  
;>>  SEARCH-RESULTS: "clim"
;>>  ======================
;>>  
;>>   Quicklisp
;>>   ---------
;>>    automaton
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/Drei/cl-automaton/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    clim
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    clim-basic
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    clim-clx
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    clim-core
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    clim-examples
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    clim-gtkairo
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    clim-lisp
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    clim-listener
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    clim-looks
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    clim-null
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    clim-postscript
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    climacs
;>>        ~/quicklisp/dists/quicklisp/software/climacs-20101006-cvs/
;>>        http://beta.quicklisp.org/archive/climacs/2010-10-06/climacs-20101006-cvs.tgz
;>>    climc
;>>        http://beta.quicklisp.org/archive/climc/2014-03-16/climc-20140316-git.tgz
;>>    climc-test
;>>        http://beta.quicklisp.org/archive/climc/2014-03-16/climc-20140316-git.tgz
;>>    climon
;>>        http://beta.quicklisp.org/archive/climon/2014-03-16/climon-20140316-git.tgz
;>>    climon-test
;>>        http://beta.quicklisp.org/archive/climon/2014-03-16/climon-20140316-git.tgz
;>>    clouseau
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    conditional-commands
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/Extensions/conditional-commands/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    drei-mcclim
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    drei-tests
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    esa
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/ESA/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    esa-mcclim
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    functional-geometry
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/Apps/Functional-Geometry/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    goatee-core
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    mcclim
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    mcclim-gif-bitmaps
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    mcclim-jpeg-bitmaps
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    mcclim-png-bitmaps
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    mcclim-tiff-bitmaps
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>    mcclim-tree-with-cross-edges
;>>        ~/quicklisp/dists/quicklisp/software/mcclim-20140316-git/Experimental/tree-with-cross-edges/
;>>        http://beta.quicklisp.org/archive/mcclim/2014-03-16/mcclim-20140316-git.tgz
;>>  
;>>   Cliki
;>>   -----
;>>    CLIM
;>>        http://www.cliki.net/CLIM
;>>    Climc
;>>        http://www.cliki.net/Climc
;>>    climacs
;>>        http://www.cliki.net/climacs
;>>    clim-chess
;>>        http://www.cliki.net/clim-chess
;>>    clim-desktop
;>>        http://www.cliki.net/clim-desktop
;>>    McCLIM
;>>        http://www.cliki.net/McCLIM
;>>    Alpine
;>>        http://www.cliki.net/Alpine
;>>    beirc
;>>        http://www.cliki.net/beirc
;>>    CL-Emacs
;>>        http://www.cliki.net/CL-Emacs
;>>    cl-menusystem
;>>        http://www.cliki.net/cl-menusystem
;>>    cl-reversi
;>>        http://www.cliki.net/cl-reversi
;>>    clones
;>>        http://www.cliki.net/clones
;>>    Closure
;>>        http://www.cliki.net/Closure
;>>    Craig Lanning
;>>        http://www.cliki.net/Craig%20Lanning
;>>    Cyrus Harmon
;>>        http://www.cliki.net/Cyrus%20Harmon
;>>    de.setf.graphics
;>>        http://www.cliki.net/de.setf.graphics
;>>    decaf
;>>        http://www.cliki.net/decaf
;>>    Development
;>>        http://www.cliki.net/Development
;>>    Dwight Holman
;>>        http://www.cliki.net/Dwight%20Holman
;>>    Emacs
;>>        http://www.cliki.net/Emacs
;>>    Ernestine
;>>        http://www.cliki.net/Ernestine
;>>    esa
;>>        http://www.cliki.net/esa
;>>    Express Engine
;>>        http://www.cliki.net/Express%20Engine
;>>    Extension webactions
;>>        http://www.cliki.net/Extension%20webactions
;>>    Features
;>>        http://www.cliki.net/Features
;>>    floyd-warshall
;>>        http://www.cliki.net/floyd-warshall
;>>    Gsharp
;>>        http://www.cliki.net/Gsharp
;>>    ICanCAD
;>>        http://www.cliki.net/ICanCAD
;>>    Jochen Schmidt
;>>        http://www.cliki.net/Jochen%20Schmidt
;>>    Libre Software Meeting 2004
;>>        http://www.cliki.net/Libre%20Software%20Meeting%202004
;>>    Lisp books
;>>        http://www.cliki.net/Lisp%20books
;>>    LMud
;>>        http://www.cliki.net/LMud
;>>    mel-base
;>>        http://www.cliki.net/mel-base
;>>    Naming conventions
;>>        http://www.cliki.net/Naming%20conventions
;>>    psgraph
;>>        http://www.cliki.net/psgraph
;>>    Roland Kaufmann
;>>        http://www.cliki.net/Roland%20Kaufmann
;>>    rt
;>>        http://www.cliki.net/rt
;>>    sb-sprof-ui
;>>        http://www.cliki.net/sb-sprof-ui
;>>    Screenshots
;>>        http://www.cliki.net/Screenshots
;>>    Suggested Programming Projects
;>>        http://www.cliki.net/Suggested%20Programming%20Projects
;>>    SWINE
;>>        http://www.cliki.net/SWINE
;>>    thread
;>>        http://www.cliki.net/thread
;>>    Vladimir Sedach
;>>        http://www.cliki.net/Vladimir%20Sedach
;>>    WeirdIRC
;>>        http://www.cliki.net/WeirdIRC
;>>    YoungLispers
;>>        http://www.cliki.net/YoungLispers
;>>  
;>>   GitHub
;>>   ------
;>>    clim-doc
;>>        https://github.com/mmontone/clim-doc
;>>    clim-chess
;>>        https://github.com/stassats/clim-chess
;>>    McCLIM
;>>        https://github.com/robert-strandh/McCLIM
;>>    clim-class-browser
;>>        https://github.com/pocket7878/clim-class-browser
;>>    clim-cl-gtk2
;>>        https://github.com/MakarovAlexey/clim-cl-gtk2
;>>    mcclim
;>>        https://github.com/slyrus/mcclim
;>>    CLIMatis
;>>        https://github.com/robert-strandh/CLIMatis
;>>    climacs
;>>        https://github.com/mathrick/climacs
;>>    Climacs
;>>        https://github.com/LaPingvino/Climacs
;>>    climacs
;>>        https://github.com/quek/climacs
;>>    climc
;>>        https://github.com/nlamirault/climc
;>>    climon
;>>        https://github.com/nlamirault/climon
;>>    spectacle
;>>        https://github.com/slyrus/spectacle
;>>    Compta
;>>        https://github.com/robert-strandh/Compta
;>>    climp
;>>        https://github.com/sviridov/climp
;>>    clime
;>>        https://github.com/mon-key/clime
;>>    climbe
;>>        https://github.com/fjames86/climbe
;>>    mcclim
;>>        https://github.com/timoore/mcclim
;>>    mcclim-uim
;>>        https://github.com/quek/mcclim-uim
;>>    LisPod
;>>        https://github.com/pocket7878/LisPod
;>>    ernestine
;>>        https://github.com/nlamirault/ernestine
;>>    sudoku-mcclim
;>>        https://github.com/tortkis/sudoku-mcclim
;>>    math-interactor
;>>        https://github.com/OlafMerkert/math-interactor
;>>    Second-Climacs
;>>        https://github.com/robert-strandh/Second-Climacs
;>>    climacs-g000001
;>>        https://github.com/g000001/climacs-g000001
;>>    info.read-eval-print.climacs.ext
;>>        https://github.com/quek/info.read-eval-print.climacs.ext
;>>    info.read-eval-print.climacs.dired
;>>        https://github.com/quek/info.read-eval-print.climacs.dired
;>>  
;>>   BitBucket
;>>   ---------
;>>    climacs-clim-listener-beirc
;>>        https://bitbucket.org/wbooze/climacs-clim-listener-beirc
;>>    com.symsim.oss.collada-gui
;>>        https://bitbucket.org/symbolicsimulation/com.symsim.oss.collada-gui
;>>  
;=>  CL:T

 オプションが色々取れるのですが、シェルのキーワードのように合体して記述できるところが便利です。

(qs:? "clim" :u :g)(qs:? "clim" :ug)

まとめ

 今回は、quicksearchを紹介してみました。
これは結構便利そうなので活用して行きたいところです。
エディタのコマンドから使えると、更に便利そうですね。

comments powered by Disqus