Starting with emacs-19.30, the default C mode is cc-mode.el, a nice
rewrite of the original c-mode.el. Luckily for us, cc-mode.el supports
Objective C directly. The basic function to invoke it is
objc-mode
. The following bit of code in your .emacs
will cause emacs to automatically enter objc-mode on all files that
end in .m or .h:
(setq auto-mode-alist (append '(("\\.h$" . objc-mode) ("\\.m$" . objc-mode))))
;; modified objective c - get defuns, id. (let ((comments '(("/\\*" "\\*/" comment))) (c++-comments '(("//.*$" nil comment) ("^/.*$" nil comment))) (strings '((hilit-string-find ?' string))) (preprocessor '(("^#[ \t]*\\(undef\\|define\\).*$" "[^\\]$" define) ("^#.*$" nil include)))) (hilit-set-mode-patterns '(objc-mode objective-C-mode) (append comments c++-comments strings preprocessor '( ;; function decls are expected to have types on the previous line ("^\\(\\(\\w\\|[$_]\\)+::\\)?\\(\\w\\|[$_]\\)+\\s *\\(\\(\\w\\|[$_]\\)+\\s *((\\|(\\)[^)]*)+" nil defun) ("^\\(\\(\\w\\|[$_]\\)+[ \t]*::[ \t]*\\)?\\(\\(\\w\\|[$_]\\)+\\|operator.*\\)\\s *\\(\\(\\w\\|[$_]\\)+\\s *((\\|(\\)[^)]*)+" nil defun) ;; nelson - objective c style defuns ("^[-+].*{" nil defun) ("^\\(template\\|typedef\\|struct\\|union\\|class\\|enum\\|public\\|private\\|protected\\).*$" nil decl) ;; datatype -- black magic regular expression (nelson - add id) ("[ \n\t({]\\(\\(const\\|register\\|volatile\\|unsigned\\|extern\\|static\\)\\s +\\)*\\(\\(\\w\\|[$_]\\)+_t\\|float\\|double\\|void\\|char\\|short\\|int\\|unsigned\\|long\\|id\\|FILE\\|\\(\\(struct\\|union\\|enum\\|class\\)\\([ \t]+\\(\\w\\|[$_]\\)*\\)\\)\\)\\(\\s +\\*+)?\\|[ \n\t;()]\\)" nil type) ;; Objective C stuff: ^@[word] gets keyword colouring ("^@\\sw*" nil keyword) ;; key words ("[^_]\\<\\(return\\|goto\\|if\\|else\\|case\\|default\\|switch\\|break\\|continue\\|while\\|do\\|for\\|super\\|self\\)\\>[^_]" 1 keyword)))))