diff --git a/docs/_static/ide-platformio-emacs.png b/docs/_static/ide-platformio-emacs.png new file mode 100644 index 0000000000..e61bf76bcc Binary files /dev/null and b/docs/_static/ide-platformio-emacs.png differ diff --git a/docs/ide.rst b/docs/ide.rst index 723e342ebf..b1be7714ee 100644 --- a/docs/ide.rst +++ b/docs/ide.rst @@ -21,6 +21,7 @@ IDE Integration ide/atom ide/clion ide/eclipse + ide/emacs ide/energia ide/qtcreator ide/sublimetext diff --git a/docs/ide/emacs.rst b/docs/ide/emacs.rst new file mode 100644 index 0000000000..7c1511033f --- /dev/null +++ b/docs/ide/emacs.rst @@ -0,0 +1,77 @@ +.. Copyright 2014-2015 Ivan Kravets + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +.. _ide_emacs: + +Emacs +===== + +GNU Emacs is an extensible, customizable text editor - and more. At its core is +an interpreter for Emacs Lisp, a dialect of the +`Lisp programming language `_ +with extensions to support text editing. + + +This software can be used with: + +* all available :ref:`platforms` +* all available :ref:`frameworks` + +Refer to the `Emacs Documentation `_ +page for more detailed information. + +.. contents:: + +Integration +----------- + +PlatformIO-Mode +^^^^^^^^^^^^^^^ + +An Emacs minor mode has been written to facilitate building and uploading from within Emacs. +It can be installed from the MELPA repository using ``M-x package-install``. +See the MELPA `Getting Started `_ page for more information. + +Setup instructions for the minor mode can be found at the `Github page `_. + +Code completion can optionally be provided by installing `irony-mode `_ + + +Project Generator +^^^^^^^^^^^^^^^^^ + +You can generate an Emacs compatible project using +:option:`platformio init --ide` command. Please choose board type using +:ref:`cmd_boards` command and run: + +.. code-block:: shell + + platformio init --ide emacs --board %TYPE% + cmake . + + +There are 4 predefined targets for building. + +* ``platformio_build`` - Build project without auto-uploading. (``C-c i b``) +* ``platformio_upload`` - Build and upload (if no errors). (``C-c i u``) +* ``platformio_clean`` - Clean compiled objects. (``C-c i c``) +* ``platformio_update`` - Update installed platforms and libraries. (``C-C i d``) + +.. warning:: + The libraries which are added, installed or used in the project + after generating process wont be reflected in IDE. To fix it you + need to reinitialize project using :ref:`cmd_init` (repeat it). + + +Screenshot +---------- + +.. image:: ../_static/ide-platformio-emacs.png diff --git a/platformio/ide/tpls/emacs/.gitignore.tpl b/platformio/ide/tpls/emacs/.gitignore.tpl new file mode 100644 index 0000000000..f26ff7986c --- /dev/null +++ b/platformio/ide/tpls/emacs/.gitignore.tpl @@ -0,0 +1,5 @@ +CMakeCache.txt +CMakeFiles/ +MakeFile +cmake_install.cmake +compile_commands.json \ No newline at end of file diff --git a/platformio/ide/tpls/emacs/CMakeLists.txt.tpl b/platformio/ide/tpls/emacs/CMakeLists.txt.tpl new file mode 100644 index 0000000000..7083f46621 --- /dev/null +++ b/platformio/ide/tpls/emacs/CMakeLists.txt.tpl @@ -0,0 +1,56 @@ +cmake_minimum_required(VERSION 3.2) +project({{project_name}}) + +set(ENV{PATH} "{{env_path}}") +set(PLATFORMIO_CMD "{{platformio_path}}") +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +% for include in includes: +% if include.startswith(user_home_dir): +% if "windows" in systype: +include_directories("$ENV{HOMEDRIVE}$ENV{HOMEPATH}{{include.replace(user_home_dir, '').replace("\\", "/")}}") +% else: +include_directories("$ENV{HOME}{{include.replace(user_home_dir, '').replace("\\", "/")}}") +% end +% else: +include_directories("{{include.replace("\\", "/")}}") +% end +% end + +% for define in defines: +add_definitions(-D{{!define}}) +% end + +add_custom_target( + platformio_build ALL + COMMAND ${PLATFORMIO_CMD} -f -c emacs run + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_custom_target( + platformio_upload ALL + COMMAND ${PLATFORMIO_CMD} -f -c emacs run --target upload + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_custom_target( + platformio_clean ALL + COMMAND ${PLATFORMIO_CMD} -f -c emacs run --target clean + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_custom_target( + platformio_update ALL + COMMAND ${PLATFORMIO_CMD} -f -c emacs update + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +% if main_src_file: +add_executable({{project_name}} {{main_src_file.replace("\\", "/")}}) +% else: +# +# To enable code auto-completion, please specify path +# to main source file (*.c, *.cpp) and uncomment line below +# +# add_executable({{project_name}} src/main_change_me.cpp) +% end