Skip to content

arduino-mode updates #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
2 changes: 2 additions & 0 deletions arduino-mode-init.el
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(autoload 'arduino-mode "arduino-mode" "Major mode for editing Arduino code." t)
(add-to-list 'auto-mode-alist '("\\.pde\\'" . arduino-mode))
83 changes: 75 additions & 8 deletions arduino-mode.el
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@
(eval-when-compile
(require 'cc-langs)
(require 'cc-fonts)
(require 'cc-menus))
(require 'cc-menus)
(require 'term))

(eval-and-compile
;; fall back on c-mode
Expand All @@ -49,22 +50,26 @@

(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
"analogReference" "analogRead" "analogWrite" ; Analog I/O
"tone" "noTone" "shiftIn" "shiftOut" "pulseIn" ; Advanced I/O
"millis" "micros" "delay" "delayMicroseconds" ; Time
"min" "max" "abs" "constrain" "map" "pow" "sq" "sqrt" ; Math
"sin" "cos" "tan" ; Trigonometry
"randomSeed" "random" ; Random Numbers
"lowByte" "highByte" "bitRead" "bitWrite" "bitSet" ; Bits and Bytes
"bitClear" "bit"
"attachInterrupt" "detachInterrupt" ; External Interrupts
"interrupts" "noInterrupts" ; Interrupts
"begin" "available" "read" "flush" "print" "println") ; Serial Communication
"begin" "end" "available" "read" "flush" "print" "println" ; Serial Communication
"write" "peek")
(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")
(defgroup arduino nil "Arduino mode customizations"
:group 'languages)

(defcustom arduino-font-lock-extra-types nil
"*List of extra types (aside from the type keywords) to recognize in Arduino mode.
Expand Down Expand Up @@ -102,10 +107,72 @@ Each list item should be a regexp matching a single identifier." :group 'arduino
;; Add bindings which are only useful for Arduino
map)
"Keymap used in arduino-mode buffers.")
(define-key arduino-mode-map "\C-cg" 'arduino-upload)
(unless (string-match "XEmacs" emacs-version)
(define-key arduino-mode-map "\C-cm" 'arduino-serial-monitor))

(easy-menu-define arduino-menu arduino-mode-map "Arduino Mode Commands"
(cons "Arduino" (c-lang-const c-mode-menu arduino)))

; How does one add this directly to the Arduino menu in XEmacs?
(if (string-match "XEmacs" emacs-version)
(easy-menu-add-item arduino-menu
(list "Micro-controller") ["Upload" arduino-upload t])
(easy-menu-add-item arduino-menu
nil ["----" nil nil])
(easy-menu-add-item arduino-menu
nil ["Upload" arduino-upload t])
(easy-menu-add-item arduino-menu
nil ["Serial monitor" arduino-serial-monitor t]))

(defcustom arduino-makefile-name "Makefile"
"Name of Makefile used to compile and upload Arduino sketches."
:type 'string
:group 'arduino)

(defun arduino-upload ()
"Upload a sketch to an Arduino board.

You will need a suitable Makefile. See URL
`http://mjo.tc/atelier/2009/02/arduino-cli.html'."
(interactive)
(if (file-exists-p arduino-makefile-name)
(progn
(make-local-variable 'compile-command)
(compile (concat "make -f " arduino-makefile-name " -k upload")))
(if (y-or-n-p (concat "No Makefile `" arduino-makefile-name
"' exists. Create it? "))
(let ((arduino-project-name
(file-name-nondirectory
(file-name-sans-extension (buffer-file-name)))))
(find-file-other-window arduino-makefile-name)
(insert "# Customise the following values as required:

TARGET = " arduino-project-name "
ARDUINO_LIBS =

MCU = atmega328p
F_CPU = 16000000
ARDUINO_PORT = /dev/ttyUSB*
AVRDUDE_ARD_BAUDRATE = 57600
ARDUINO_DIR = /usr/share/arduino

# If you do not already have Arduino.mk, find it at
# http://mjo.tc/atelier/2009/02/arduino-cli.html
include /usr/share/arduino/Arduino.mk
")
(message "Edit the Makefile as required and re-run arduino-upload."))
(message (concat "No Makefile `" arduino-makefile-name "' exists. Uploading cancelled.")))))

(unless (string-match "XEmacs" emacs-version)
(defun arduino-serial-monitor (port speed)
"Monitor the serial connection to the Arduino."
(interactive (list (serial-read-name) nil))

(if (get-buffer-process port)
(switch-to-buffer port)
(serial-term port (or speed (serial-read-speed))))))

;;;###autoload
(add-to-list 'auto-mode-alist '("\\.pde\\'" . arduino-mode))

Expand All @@ -127,7 +194,7 @@ Key bindings:
local-abbrev-table arduino-mode-abbrev-table
abbrev-mode t
imenu-generic-expression cc-imenu-c-generic-expression)
(use-local-map c-mode-map)
(use-local-map arduino-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.
Expand Down
149 changes: 149 additions & 0 deletions emacs-common-arduino-mode.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
%global pkg arduino-mode
%global pkgname Arduino Mode
%global gitcommit aa051bb

Name: emacs-common-%{pkg}
Version: 0
Release: 0.3.20100907git%{gitcommit}%{?dist}
Summary: Emacs editing mode for Arduino code

Group: Development/Tools
License: GPLv3+
URL: http://github.com/mavit/%{pkg}/
Source0: http://download.github.com/mavit-%{pkg}-%{gitcommit}.tar.gz

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
BuildRequires: emacs xemacs xemacs-packages-extra
Requires: arduino-mk

%description
%{pkgname} is an add-on package for GNU Emacs and XEmacs, providing an
editing mode for the Arduino electronics prototyping platform.

This package contains the files common to both the GNU Emacs and XEmacs
%{pkgname} packages.


%package -n emacs-%{pkg}
Summary: Compiled elisp files to run %{pkgname} under GNU Emacs
Group: Development/Tools
Requires: emacs(bin) >= %{_emacs_version}
Requires: emacs-common-%{pkg} = %{version}-%{release}

%description -n emacs-%{pkg}
This package contains the byte compiled elisp packages to run
%{pkgname} with GNU Emacs.


%package -n emacs-%{pkg}-el
Summary: Elisp source files for %{pkgname} under GNU Emacs
Group: Development/Tools
Requires: emacs-%{pkg} = %{version}-%{release}

%description -n emacs-%{pkg}-el
This package contains the elisp source files for %{pkgname} under GNU
Emacs. You do not need to install this package to run
%{pkgname}. Install the emacs-%{pkg} package to use %{pkgname} with
GNU Emacs.


%package -n xemacs-%{pkg}
Summary: Compiled elisp files to run %{pkgname} under XEmacs
Group: Development/Tools
Requires: xemacs(bin) >= %{_xemacs_version}
Requires: emacs-common-%{pkg} = %{version}-%{release}

%description -n xemacs-%{pkg}
This package contains the byte compiled elisp packages to use %{pkgname}
with XEmacs.


%package -n xemacs-%{pkg}-el
Summary: Elisp source files for %{pkgname} under XEmacs
Group: Development/Tools
Requires: xemacs-%{pkg} = %{version}-%{release}

%description -n xemacs-%{pkg}-el
This package contains the elisp source files for %{pkgname} under
XEmacs. You do not need to install this package to run
%{pkgname}. Install the xemacs-%{pkg} package to use %{pkgname} with
XEmacs.


%prep
%setup -q -n mavit-%{pkg}-%{gitcommit}


%build
%{_emacs_bytecompile} %{pkg}.el
mv %{pkg}.elc %{pkg}.gnu.elc
%{_xemacs_bytecompile} %{pkg}.el


%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/%{_emacs_sitelispdir}/%{pkg} \
$RPM_BUILD_ROOT/%{_xemacs_sitelispdir}/%{pkg} \
$RPM_BUILD_ROOT/%{_emacs_sitestartdir} \
$RPM_BUILD_ROOT/%{_xemacs_sitestartdir}
cp -a %{pkg}.el $RPM_BUILD_ROOT/%{_emacs_sitelispdir}/%{pkg}/
cp -a %{pkg}.gnu.elc $RPM_BUILD_ROOT/%{_emacs_sitelispdir}/%{pkg}/%{pkg}.elc
cp -a %{pkg}.el %{pkg}.elc $RPM_BUILD_ROOT/%{_xemacs_sitelispdir}/%{pkg}/
cp -a %{pkg}-init.el $RPM_BUILD_ROOT/%{_emacs_sitestartdir}/
cp -a %{pkg}-init.el $RPM_BUILD_ROOT/%{_xemacs_sitestartdir}/


%clean
rm -rf $RPM_BUILD_ROOT


%files
%defattr(-,root,root,-)
%doc


%files -n emacs-%{pkg}
%defattr(-,root,root,-)
%{_emacs_sitelispdir}/%{pkg}/*.elc
%{_emacs_sitestartdir}/*.el
%dir %{_emacs_sitelispdir}/%{pkg}


%files -n emacs-%{pkg}-el
%defattr(-,root,root,-)
%{_emacs_sitelispdir}/%{pkg}/*.el


%files -n xemacs-%{pkg}
%defattr(-,root,root,-)
%{_xemacs_sitelispdir}/%{pkg}/*.elc
%{_xemacs_sitestartdir}/*.el
%dir %{_xemacs_sitelispdir}/%{pkg}


%files -n xemacs-%{pkg}-el
%defattr(-,root,root,-)
%{_xemacs_sitelispdir}/%{pkg}/*.el


%changelog
* Wed Sep 22 2010 Peter Oliver <rpm@mavit.org.uk> - 0-0.3.20100907gitaa051bb
- Add missing BuildRequires of xemacs-packages-extra.

* Thu Sep 9 2010 Peter Oliver <rpm@mavit.org.uk> - 0-0.2.20100907gitaa051bb
- Updated version of arduino-mode.

* Tue Sep 7 2010 Peter Oliver <rpm@mavit.org.uk> - 0-0.1.20100907git3cc39d9
- Apply package naming guidelines.

* Tue Sep 7 2010 Peter Oliver <rpm@mavit.org.uk> - git2.3cc39d9-1
- Updated version of arduino-mode.
- Require arduino-mk.

* Tue Sep 7 2010 Peter Oliver <rpm@mavit.org.uk> - git1.16e1d57-2
- Use correct version of compiled code for GNU Emacs.

* Tue Sep 7 2010 Peter Oliver <rpm@mavit.org.uk> - git1.16e1d57-1
- Initial version.