From fdc1028cfd9e6563dbbe950cdd539559ce8d6353 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 25 Apr 2012 00:13:37 +0200 Subject: emacs: added some additional modes --- emacs.d/lisp/arduino-mode.el | 147 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 emacs.d/lisp/arduino-mode.el (limited to 'emacs.d/lisp/arduino-mode.el') diff --git a/emacs.d/lisp/arduino-mode.el b/emacs.d/lisp/arduino-mode.el new file mode 100644 index 0000000..0f434b5 --- /dev/null +++ b/emacs.d/lisp/arduino-mode.el @@ -0,0 +1,147 @@ +;;; arduino-mode.el --- Major mode for the Arduino language + +;; Copyright (C) 2008 Christopher Grim + +;; Author: Christopher Grim +;; Keywords: languages, arduino + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: +;; +;; Based on derived-mode-ex.el found here: +;; +;; . +;; + +;;; Code: +(require 'cc-mode) + +(eval-when-compile + (require 'cc-langs) + (require 'cc-fonts) + (require 'cc-menus)) + +(eval-and-compile + ;; fall back on c-mode + (c-add-language 'arduino-mode 'c-mode)) + +(c-lang-defconst c-primitive-type-kwds + arduino (append '("boolean" "byte") + (c-lang-const c-primitive-type-kwds))) + +(c-lang-defconst c-constant-kwds + arduino (append '("HIGH" "LOW" "INPUT" "OUTPUT") + (c-lang-const c-constant-kwds))) + +(c-lang-defconst c-simple-stmt-kwds + arduino (append '("pinMode" "digitalWrite" "digitalRead" ; Digital I/O + "analogRead" "analogWrite" ; Analog I/O + "shiftOut" "pulseIn" ; Advanced I/O + "millis" "delay" "delayMicroseconds" ; Time + "min" "max" "abs" "constrain" "map" "pow" "sq" "sqrt" "sin" ; Math + "sin" "cos" "tan" ; Trigonometry + "randomSeed" "random" ; Random Numbers + "attachInterrupt" "detachInterrupt" ; External Interrupts + "interrupts" "noInterrupts" ; Interrupts + "begin" "available" "read" "flush" "print" "println") ; Serial Communication + (c-lang-const c-simple-stmt-kwds))) + +(c-lang-defconst c-primary-expr-kwds + arduino (append '("Serial") + (c-lang-const c-primary-expr-kwds))) + +(defgroup arduino nil "Arduino mode customizations") + +(defcustom arduino-font-lock-extra-types nil + "*List of extra types (aside from the type keywords) to recognize in Arduino mode. +Each list item should be a regexp matching a single identifier." :group 'arduino) + +(defconst arduino-font-lock-keywords-1 (c-lang-const c-matchers-1 arduino) + "Minimal highlighting for Arduino mode.") + +(defconst arduino-font-lock-keywords-2 (c-lang-const c-matchers-2 arduino) + "Fast normal highlighting for Arduino mode.") + +(defconst arduino-font-lock-keywords-3 (c-lang-const c-matchers-3 arduino) + "Accurate normal highlighting for Arduino mode.") + +(defvar arduino-font-lock-keywords arduino-font-lock-keywords-3 + "Default expressions to highlight in ARDUINO mode.") + +(defvar arduino-mode-syntax-table nil + "Syntax table used in arduino-mode buffers.") +(or arduino-mode-syntax-table + (setq arduino-mode-syntax-table + (funcall (c-lang-const c-make-mode-syntax-table arduino)))) + +(defvar arduino-mode-abbrev-table nil + "Abbreviation table used in arduino-mode buffers.") + +(c-define-abbrev-table 'arduino-mode-abbrev-table + ;; Keywords that if they occur first on a line might alter the + ;; syntactic context, and which therefore should trig reindentation + ;; when they are completed. + '(("else" "else" c-electric-continued-statement 0) + ("while" "while" c-electric-continued-statement 0))) + +(defvar arduino-mode-map (let ((map (c-make-inherited-keymap))) + ;; Add bindings which are only useful for Arduino + map) + "Keymap used in arduino-mode buffers.") + +(easy-menu-define arduino-menu arduino-mode-map "Arduino Mode Commands" + (cons "Arduino" (c-lang-const c-mode-menu arduino))) + +;;;###autoload +(add-to-list 'auto-mode-alist '("\\.pde\\'" . arduino-mode)) + +;;;###autoload +(defun arduino-mode () + "Major mode for editing Arduino code. + +The hook `c-mode-common-hook' is run with no args at mode +initialization, then `arduino-mode-hook'. + +Key bindings: +\\{arduino-mode-map}" + (interactive) + (kill-all-local-variables) + (c-initialize-cc-mode t) + (set-syntax-table arduino-mode-syntax-table) + (setq major-mode 'arduino-mode + mode-name "Arduino" + local-abbrev-table arduino-mode-abbrev-table + abbrev-mode t + imenu-generic-expression cc-imenu-c-generic-expression) + (use-local-map c-mode-map) + ;; `c-init-language-vars' is a macro that is expanded at compile + ;; time to a large `setq' with all the language variables and their + ;; customized values for our language. + (c-init-language-vars arduino-mode) + ;; `c-common-init' initializes most of the components of a CC Mode + ;; buffer, including setup of the mode menu, font-lock, etc. + ;; There's also a lower level routine `c-basic-common-init' that + ;; only makes the necessary initialization to get the syntactic + ;; analysis and similar things working. + (c-common-init 'arduino-mode) + (easy-menu-add arduino-menu) + (run-hooks 'c-mode-common-hook) + (run-hooks 'arduino-mode-hook) + (c-update-modeline)) + +(provide 'arduino-mode) +;;; arduino-mode.el ends here -- cgit v1.2.3