22 июня 2012

Поиск документации по Common Lisp-овым символам

Хочу напомнить, что наиболее удобным/быстрым способом поиска документации по стандартным символам Common Lisp'а является GNU'шная система справки texinfo, которая отлично поддерживается emacs'ом.

Для того, чтобы всё заработало, нужно:

  • Скачать dpans2texi-1.05.tar.gz
  • Выполнить
    cd dpans2texi-1.05
    ./configure
    make wget
    make
    
  • Поправить емаксовый конфиг. Строку "/path/to/dpans2texi-1.05" поменять на свою.
    (require 'info-look)
    (setq Info-additional-directory-list '("/path/to/dpans2texi-1.05"))
     
    (eval-after-load "slime"
      ;; register info help (dpans2texi)
      (progn 
        (info-lookup-add-help
         :mode 'lisp-mode
         :regexp "[^][()'\" \t\n]+"
         :ignore-case t
         :doc-spec '(("(ansicl)Symbol Index" nil nil nil)))
        
        (info-lookup-add-help
         :mode 'slime-repl-mode
         :regexp "[^][()'\" \t\n]+"
         :ignore-case t
         :doc-spec '(("(ansicl)Symbol Index" nil nil nil)))
        
        (defvar slime-old-documentation-lookup-function 
          (if (boundp 'slime-documentation-lookup-function)
              slime-documentation-lookup-function))
    
        (defun slime-ansicl-lookup (symbol-name)
          (interactive (list (slime-read-symbol-name "Symbol: ")))
          (info-lookup-symbol symbol-name 'lisp-mode))
    
        (setq slime-documentation-lookup-function 'slime-ansicl-lookup)
        (setq slime-ansicl-lookup (symbol-function 'slime-ansicl-lookup))))
    

Теперь, чтобы просмотреть справку по символу, нужно всего лишь на искомом слове нажать стандартное слаймовское сочетание клавиш C-c C-d h.

6 комментариев:

  1. Что-то не собирается ни фига, после ./configure:

    $ make
    emacs --batch -q --no-site-file -l dpans2texi.elc -f dp-tex2texi
    Opening input file: no such file or directory, /home/linkfly/work_files/cl-programming/dpans2texi-1.05/chap-0-edit-history.tex
    make: *** [temp.texi] Error 255

    ОтветитьУдалить
    Ответы
    1. А make wget, чтобы он latex'овые сорсы скачал?

      Удалить
  2. Да, действительно удобно, спасибо! Только вот emacs'овый конфиг у меня работает (может быть связано с различием версий emacs'a или бог знает с чем). Я поправил следующим образом (изменения помечены ;;;!!! правка пути к dpans2texi-1.05 конечно не в счёт ) и всё заработало:

    (require 'info-look)
    (setq Info-additional-directory-list '("/home/linkfly/work_files/cl-programming/dpans2texi-1.05"))

    (eval-after-load "slime"
    ;; register info help (dpans2texi)
    (progn
    (info-lookup-add-help
    :mode 'lisp-mode
    :regexp "[^][()'\" \t\n]+"
    :ignore-case t
    :doc-spec '(("(ansicl)Symbol Index" nil nil nil)))

    (info-lookup-add-help
    :mode 'slime-repl-mode
    :regexp "[^][()'\" \t\n]+"
    :ignore-case t
    :doc-spec '(("(ansicl)Symbol Index" nil nil nil)))


    (defvar slime-old-documentation-lookup-function
    ;;;!!!
    (if (boundp 'slime-documentation-lookup-function)
    slime-documentation-lookup-function))

    (defun slime-ansicl-lookup (symbol-name)
    (interactive (list (slime-read-symbol-name "Symbol: ")))
    (info-lookup-symbol symbol-name 'lisp-mode))

    (setq slime-documentation-lookup-function 'slime-ansicl-lookup)
    ;;;!!!
    (setq slime-ansicl-lookup (symbol-function 'slime-ansicl-lookup))
    ))

    ОтветитьУдалить
    Ответы
    1. у меня емакс 24 и слайм из квиклиспа, я поправил пока на твой вариант.

      Удалить
  3. По указанной ссылке dpans2texi-1.05.tar.gz больше не загружается, а его код с github нуждается в правке, см. http://chalaev.com/emacs.html

    ОтветитьУдалить