From 223c69e22c427f9d6c761f678e3ae12f72461680 Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Wed, 17 Feb 2010 22:00:30 +0100 Subject: [PATCH] new Emacs cython-mode by Georg Brandl --- Tools/cython-mode.el | 64 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/Tools/cython-mode.el b/Tools/cython-mode.el index ae1af7f3..53487da1 100644 --- a/Tools/cython-mode.el +++ b/Tools/cython-mode.el @@ -1 +1,63 @@ -;;;; `Cython' mode. (add-to-list 'auto-mode-alist '("\\.pyx\\'" . cython-mode)) (define-derived-mode cython-mode python-mode "Cython" (font-lock-add-keywords nil `((,(concat "\\<\\(NULL" "\\|c\\(def\\|har\\|typedef\\)" "\\|e\\(num\\|xtern\\)" "\\|float" "\\|in\\(clude\\|t\\)" "\\|object\\|public\\|struct\\|type\\|union\\|void" "\\)\\>") 1 font-lock-keyword-face t)))) \ No newline at end of file +;; Cython mode + +(require 'python-mode) + +(add-to-list 'auto-mode-alist '("\\.pyx\\'" . cython-mode)) +(add-to-list 'auto-mode-alist '("\\.pxd\\'" . cython-mode)) +(add-to-list 'auto-mode-alist '("\\.pxi\\'" . cython-mode)) + + +(defun cython-compile () + "Compile the file via Cython." + (interactive) + (let ((cy-buffer (current-buffer))) + (with-current-buffer + (compile compile-command) + (set (make-local-variable 'cython-buffer) cy-buffer) + (add-to-list (make-local-variable 'compilation-finish-functions) + 'cython-compilation-finish))) + ) + +(defun cython-compilation-finish (buffer how) + "Called when Cython compilation finishes." + ;; XXX could annotate source here + ) + +(defvar cython-mode-map + (let ((map (make-sparse-keymap))) + ;; Will inherit from `python-mode-map' thanks to define-derived-mode. + (define-key map "\C-c\C-c" 'cython-compile) + map) + "Keymap used in `cython-mode'.") + +(defvar cython-font-lock-keywords + `(;; new keywords in Cython language + (,(regexp-opt '("by" "cdef" "cimport" "cpdef" "ctypedef" "enum" "except?" + "extern" "gil" "include" "nogil" "property" "public" + "readonly" "struct" "union" "DEF" "IF" "ELIF" "ELSE") 'words) + 1 font-lock-keyword-face) + ;; C and Python types (highlight as builtins) + (,(regexp-opt '("NULL" "bint" "char" "dict" "double" "float" "int" "list" + "long" "object" "Py_ssize_t" "short" "size_t" "void") 'words) + 1 font-lock-builtin-face) + ;; cdef is used for more than functions, so simply highlighting the next + ;; word is problematic. struct, enum and property work though. + ("\\<\\(?:struct\\|enum\\)[ \t]+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)" + 1 py-class-name-face) + ("\\