PL/SQL用list-function
http://ohkubo.s53.xrea.com/diary/20040811.htmlから頂いてきたやつをちょこっと改造。
文字列の先頭にfunctionなら[F]、procedureなら[P]、cursorなら[C]を付加。
引数の行が改行されていると認識できないのが課題。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; PL/SQL用のlist-function設定 ;; http://ohkubo.s53.xrea.com/diary/20040811.html (in-package "editor") (defun PL/SQL-build-summary-of-functions () (let (result package-range-alist package begin end func) (save-excursion ;; search package range (goto-char (point-min)) (while (scan-buffer "^[ \t]*create[ \t]+or[ \t]+replace[ \t]+package[ \t]+body[ \t]+\\([^ \t\r\n]+\\)[ \t\r\n]+is" :regexp t :case-fold t) (setq package (match-string 1)) (push (list (current-line-number) (concat "package " package)) result) (setq begin (point)) (if (scan-buffer (concat "end[ \t\n]+" (regexp-quote package) ";") :regexp t :case-fold t :tail t) (setq end (point)) (setq end (point-max))) (push (cons package (cons begin end)) package-range-alist) (goto-char end) (forward-char)) (goto-char (point-min)) ;; search function/procedure/cursor (while (scan-buffer "^[ \t]*\\(?:function\\|procedure\\|cursor\\)[ \t]+\\([^ \t\r\n(]+.+?\\)[ \t\r\n]+is" :regexp t :case-fold t) (setq func (match-string 1)) (setq package (car (rassoc-if #'(lambda (range) (and (< (car range) (point)) (< (point) (cdr range)))) package-range-alist))) (when package ;/_/_/_/_/_/_/_/_ MOD START 2009/05/26 _/_/_/_/_/_/_/_/ ;; (setq func (concat package "." func))) (cond ((string-equal (nth 0 (split-string (match-string 0) " \t")) "function") (setq func (concat "[F]" func))) ((string-equal (nth 0 (split-string (match-string 0) " \t")) "procedure") (setq func (concat "[P]" func))) ((string-equal (nth 0 (split-string (match-string 0) " \t")) "cursor") (setq func (concat "[C]" func))) (t (setq func (concat "[" (nth 0 (split-string (match-string 0) " \t")) "]" func)))) ) ;/_/_/_/_/_/_/_/_ MOD END 2009/05/26 _/_/_/_/_/_/_/_/ (push (list (current-line-number) func) result) (next-line))) (stable-sort result #'< :key #'car))) (add-hook '*sql-mode-hook* #'(lambda () (make-local-variable 'build-summary-function) (setq build-summary-function 'PL/SQL-build-summary-of-functions))) (in-package "user")