# HG changeset patch # User Richard M. Stallman # Date 799893917 0 # Node ID 8da04214faed2e470036625dffecc611c7b2a432 # Parent f09f5b29f52414a6c1456c210abcb92c86c52fdb (get-method-definition, get-method-definition-1): New functions. (add-log-current-defun): Use them to handle objc-mode. diff -r f09f5b29f524 -r 8da04214faed lisp/add-log.el --- a/lisp/add-log.el Sun May 07 23:08:17 1995 +0000 +++ b/lisp/add-log.el Mon May 08 00:45:17 1995 +0000 @@ -349,6 +349,8 @@ (skip-chars-forward " \t") (buffer-substring (point) (progn (forward-sexp 1) (point)))) + ((and (eq major-mode 'objc-mode) + (get-method-definition))) ((memq major-mode '(c-mode c++-mode c++-c-mode)) (beginning-of-line) ;; See if we are in the beginning part of a function, @@ -471,6 +473,31 @@ (match-end 1)))))))) (error nil))) +;; Subroutine used within get-method-definition. +;; Add the last match in the buffer to the end of `md', +;; followed by the string END; move to the end of that match. +(defun get-method-definition-1 (end) + (setq md (concat md + (buffer-substring (match-beginning 1) (match-end 1)) + end)) + (goto-char (match-end 0))) + +;; For objective C, return the method name if we are in a method. +(defun get-method-definition () + (let ((md "[")) + (save-excursion + (if (re-search-backward "^@implementation \\(.*\\)$" nil t) + (get-method-definition-1 " "))) + (save-excursion + (cond + ((re-search-backward "^\\([-+]\\)[ \t\n\f\r]*\\(([^)]*)\\)?" nil t) + (get-method-definition-1 "") + (while (not (looking-at "[{;]")) + (looking-at + "\\([^ ;{:\t\n\f\r]*:?\\)\\(([^)]*)\\)?[^ ;{:\t\n\f\r]*[ \t\n\f\r]*") + (get-method-definition-1 "")) + (concat md "]")))))) + (provide 'add-log)