Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
marvel
GitHub Repository: marvel/qnf
Path: blob/master/elisp/emacs-for-python/plugins/cython-mode.el
990 views
1
;; Cython mode
2
3
(require 'python-mode)
4
5
(add-to-list 'auto-mode-alist '("\\.pyx\\'" . cython-mode))
6
(add-to-list 'auto-mode-alist '("\\.pxd\\'" . cython-mode))
7
(add-to-list 'auto-mode-alist '("\\.pxi\\'" . cython-mode))
8
9
10
(defun cython-compile ()
11
"Compile the file via Cython."
12
(interactive)
13
(let ((cy-buffer (current-buffer)))
14
(with-current-buffer
15
(compile compile-command)
16
(set (make-local-variable 'cython-buffer) cy-buffer)
17
(add-to-list (make-local-variable 'compilation-finish-functions)
18
'cython-compilation-finish)))
19
)
20
21
(defun cython-compilation-finish (buffer how)
22
"Called when Cython compilation finishes."
23
;; XXX could annotate source here
24
)
25
26
(defvar cython-mode-map
27
(let ((map (make-sparse-keymap)))
28
;; Will inherit from `python-mode-map' thanks to define-derived-mode.
29
(define-key map "\C-c\C-c" 'cython-compile)
30
map)
31
"Keymap used in `cython-mode'.")
32
33
(defvar cython-font-lock-keywords
34
`(;; new keywords in Cython language
35
(,(regexp-opt '("by" "cdef" "cimport" "cpdef" "ctypedef" "enum" "except?"
36
"extern" "gil" "include" "nogil" "property" "public"
37
"readonly" "struct" "union" "DEF" "IF" "ELIF" "ELSE") 'words)
38
1 font-lock-keyword-face)
39
;; C and Python types (highlight as builtins)
40
(,(regexp-opt '("NULL" "bint" "char" "dict" "double" "float" "int" "list"
41
"long" "object" "Py_ssize_t" "short" "size_t" "void") 'words)
42
1 font-lock-builtin-face)
43
;; cdef is used for more than functions, so simply highlighting the next
44
;; word is problematic. struct, enum and property work though.
45
("\\<\\(?:struct\\|enum\\)[ \t]+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)"
46
1 py-class-name-face)
47
("\\<property[ \t]+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)"
48
1 font-lock-function-name-face))
49
"Additional font lock keywords for Cython mode.")
50
51
(define-derived-mode cython-mode python-mode "Cython"
52
"Major mode for Cython development, derived from Python mode.
53
54
\\{cython-mode-map}"
55
(setcar font-lock-defaults
56
(append python-font-lock-keywords cython-font-lock-keywords))
57
(set (make-local-variable 'compile-command)
58
(concat "cython -a " buffer-file-name))
59
(add-to-list (make-local-variable 'compilation-finish-functions)
60
'cython-compilation-finish)
61
)
62
63
(provide 'cython-mode)
64
65