ardggy's blog

Esc - Meta - Alt - Ctrl - Shift

helm-info で Gauche のリファレンスを読む

info からマニュアル見れるよということで下の設定を紹介していただいた。

紫ログ:Emacs上でGaucheのinfoを引く - livedoor Blog(ブログ)

helm から引けるといいなあと思って sources を書き始めたら、そのまんま helm-info-gauche-refe というコマンドを見つけた。helm-info.el を読むと、dir ファイルの解析でコマンドを生成しているようなので、/usr/local/share/info/dirGauche ノードを追加してあげるといいんじゃないかと思う。

$ sudo install-info --dir-file=/usr/local/share/info/dir --info-file=/usr/local/share/info/gauche-refe.info.gz
$ grep -i -C2 "gauche" /usr/local/share/info/dir

The Algorithmic Language Scheme
* Gauche: (gauche-refe.info).           An R7RS Scheme implementation.
* GOOPS: (goops).               The GOOPS reference manual.
* Guile Reference: (guile).     The Guile reference manual.

gauche-refj.info.gz の中身がところどころ raw-text になっていたので英語版のほうを設定している。

eww で Gauche のリファレンスを読む

gauche-manual.el を入れて eww で読めるように設定した。取得は el-get 経由で、レシピをインラインで設定している。

gauche-manual-el - jump to gauche online manual - Google Project Hosting

キーバインドM-g に当てたのは、下の記事の影響。

#:g1: M-gを活用しよう

(add-to-list 'el-get-sources
             '(:name gauche-manual
               :type svn
               :url "http://gauche-manual-el.googlecode.com/svn/trunk/"))

(el-get-bundle gauche-manual)
(autoload 'gauche-manual "gauche-manual" "jump to gauche online manual." t)
(setq browse-url-browser-function 'eww-browse-url)
(define-key scheme-mode-map (kbd "M-g m") 'gauche-manual)

scheme-mode の Gauche 対応

Gauche のライブラリを読もうとしたら、正規表現リテラル内の | が悪さをしてるらしくハイライトがめちゃくちゃになっていた。gauche-mode というのがあるようだけど、Emacs が構文をどう扱うかを知りたかったので、自前でなんとかしてみることに。

modify-syntax-entry だけではうまくいかなさそうなので、syntax-propertize-function インタフェースを実装してみた。

(add-hook 'scheme-mode-hook 'gauche-syntax)

(defun gauche-syntax ()
  (setq-local syntax-propertize-function 'gauche-syntax-propertize-function))

(defun gauche-syntax-propertize-function (start end)
  (goto-char start)
  (funcall
   (syntax-propertize-rules
    ;; for regexp literal
    ("#/.*?/" (0 "."))
    ;; original by scheme-mode.el
    ("\\(#\\);" (1 (prog1 "< cn"
                     (scheme-syntax-propertize-sexp-comment (point) end)))))
   (point) end))

(font-lock-add-keywords 'scheme-mode
  '(("#/.*?/"  (0 font-lock-builtin-face t))))