Component elisp-lookup

You are here: All Systems / lisppaste / elisp-lookup

(defpackage :elisp-lookup (:use :cl)
            (:export :populate-table :symbol-lookup)
)

(in-package :elisp-lookup)

(defparameter *elisp-root* "http://www.gnu.org/software/emacs/elisp-manual/html_node/")

(defparameter *elisp-file*
  (merge-pathnames "elisp-symbols.lisp-expr"
                   (or #.*compile-file-truename* *default-pathname-defaults*)
)
)


(defvar *table* nil)

(defvar *populated-p* nil)

(defun populate-table ()
  (unless *populated-p*
    (with-open-file (r *elisp-file* :direction :input)
      (setf *table* (make-hash-table :test #'equalp))
      (let ((s (read r)))
        (loop for i in s do (setf (gethash (car i) *table*) (cdr i)))
)

      'done
)

    (setf *populated-p* t)
)
)


(defun symbol-lookup (symbol)
  (unless *populated-p*
    (populate-table)
)

  (multiple-value-bind (val found)
      (gethash symbol *table*)
    (if found
        (concatenate 'string *elisp-root*
                     val
)
)
)
)

Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.