org-plus-contrib 20170210(in org)
Outline-based notes management and organizer

概要

<2015-01-18 Sun>本家orgパッケージのcontrib/lisp以下に登録されました。

eldoc はEmacs Lispプログラミングを支援してくれることで定番ですね。

カーソル位置の関数の引数や変数の説明がエコーエリアに
自動的に表示されるアレですよ。

eldocは拡張できるようになっているため、Emacs Lisp以外にも対応しています。

  • C言語(c-eldoc)
  • Go(go-eldoc)
  • CSS(css-eldoc)
  • PHP(php-eldoc)
  • Python(python.el)

この org-eldocorg-mode にて

  • 見出しのフルパス(?) - 大見出し〜現在の見出しまでを/で区切ったもの
  • begin_src blockのパラメータ
  • begin_src 内のソースコード(Emacs Lisp, C言語, CSS, Python, PHP, Go)のeldoc

を表示してくれます。

Emacs 24.3ではbegin_src内のEmacs Lispのeldocが
エラーになってしまうので関数を再定義しています。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてorg-plus-contribを使う方は
以下のコマンドを実行します。

M-x package-install org-plus-contrib

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name org-plus-contrib

設定 141006143712.org-eldoc.1.el(以下のコードと同一)

(require 'org-eldoc)
(org-eldoc-hook-setup)
(add-hook 'emacs-lisp-mode-hook 'eldoc-mode)
(defun org-eldoc-documentation-function ()
  "Return breadcrumbs when on a headline, args for src block header-line,
  calls other documentation functions depending on lang when inside src body."
  (or
   (org-eldoc-get-breadcrumb)
   (org-eldoc-get-src-header)
   (let ((lang (org-eldoc-get-src-lang)))
     (cond ((or
             (string= lang "elisp")
             (string= lang "emacs-lisp"))
            (cond ((fboundp 'eldoc-documentation-function-default)
                   (eldoc-documentation-function-default))

                  ((locate-library "elisp-mode") ;; we're using development version of Emacs
                   (autoload 'elisp-eldoc-documentation-function "elisp-mode" nil t)
                   (elisp-eldoc-documentation-function))
                  (t                    ;24.3
                   (let (eldoc-documentation-function)
                     (eldoc-print-current-symbol-info)))))
           ((or
             (string= lang "c") ;; http://github.com/nflath/c-eldoc
             (string= lang "C")) (when (require 'c-eldoc nil t)
                                   (c-eldoc-print-current-symbol-info)))
           ;; https://github.com/zenozeng/css-eldoc
           ((string= lang "css") (when (require 'css-eldoc nil t)
                                   (css-eldoc-function)))
           ((string= lang "python") (when (require 'python nil t)
                                      (python-eldoc-function)))
           ;; https://github.com/zenozeng/php-eldoc
           ((string= lang "php") (when (require 'php-eldoc nil t)
                                   (php-eldoc-function)))
           ((or
             (string= lang "go")
             (string= lang "golang")) (when (require 'go-eldoc nil t)
                                        (go-eldoc--documentation-function)))))))

実行方法

$ wget http://rubikitch.com/f/141006143712.org-eldoc.1.el
$ emacs -Q -f package-initialize -l 141006143712.org-eldoc.1.el

20141006143900.png
Fig1: 見出しの階層表示

20141006143907.png
Fig2: begin_src ブロックのパラメータ表示

20141006145237.png
Fig3: begin_src 内のEmacs Lispのeldoc

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。