#+startup: showall
#+options: toc:nil

# Copyright 2016-2025 Free Software Foundation, Inc.

* Emacs MATLAB-mode

[[https://mathworks.com][MathWorks]] MATLAB® and [[https://www.gnu.org/software/emacs/][GNU Emacs]] integration:

1. *matlab-mode* for editing ~*.m~ files.

   - Edit MATLAB code with syntax highlighting and smart indentation.
   - Lint MATLAB code with fix-it's using the MATLAB Code Analyzer.

2. *Code navigation and more*

   - The [[file:doc/matlab-language-server-lsp-mode.org][MATLAB Language Server with Emacs]], matlabls, provides code navigation, code completion, go
     to definition, find references, and more.

   - Imenu support for quickly jumping to function declarations in the current ~*.m~ or ~*.tlc~
     file.  See [[file:doc/matlab-imenu.org][doc/matlab-imenu.org]].

3. *M-x matlab-shell* for running and debugging MATLAB within Emacs (Unix only).

   - MATLAB command window errors are hyper-linked and files open in Emacs
   - Debugging support is available from the MATLAB menu.
   - matlab-shell uses company-mode for completions.

   See [[file:doc/matlab-shell-for-unix.org][doc/matlab-shell-for-unix.org]]

4. *M-x matlab-shell* to run remote Unix MATLAB within your local Emacs session.

   #+begin_example
     +----------------+                 +-----------------+
     | Local Computer |                 | Remote Computer |
     |                |<===============>|                 |
     |     Emacs      |      ssh        |      MATLAB     |
     +----------------+                 +-----------------+
   #+end_example

   You use Emacs on your local computer to edit files on the remote computer, run and debug remote
   MATLAB in a matlab-shell in your local Emacs.  See [[file:doc/remote-matlab-shell.org][doc/remote-matlab-shell.org]].

5. *M-x matlab-netshell* for running MATLAB code on Microsoft Windows within Emacs using an attached
   MATLAB.

   #+begin_example
    +--------------- Emacs ----------------+         +------------  MATLAB  ------------+
    |                                      |         |                                  |
    | (1) M-x matlab-netshell-server-start |         | (2) connect to Emacs             |
    |                                      |<=======>| >> addpath <matlab-mode>/toolbox |
    | (3) Visit script *.m files and use   |         | >> emacsinit                     |
    |     "MATLAB -> Code Sections" menu   |         | >>                               |
    |     or the key bindings              |         |                                  |
    +--------------------------------------+         +----------------------------------+
   #+end_example

6. *Code sections* support for MATLAB script files. See [[file:doc/matlab-code-sections.org][doc/matlab-code-sections.org]].

   - After visiting a MATLAB script, you have a *"MATLAB -> Code Sections"* menu and key bindings
     which lets you navigate, run, and move code sections.

   - Try out code sections using: [[file:examples/matlab-sections/tryout_matlabsection.m][./examples/matlab-sections/tryout_matlabsection.m]].

7. *Creation of scientific papers, theses, and documents* using MATLAB and [[http://orgmode.org]].

   - Org enables [[https://en.wikipedia.org/wiki/Literate_programming][literate programming]] which directly supports reproducible research by allowing
     scientists and engineers to write code along with detailed explanations in natural language.

   - You author code plus natural language descriptive text in ~*.org~ files. When you evaluate
     MATLAB or other language code blocks within the ~*.org~ files, org inserts the results back
     into the ~*.org~ file.

   - You can combine multiple ~*.org~ files into one final document, thus enabling larger scientific
     documents.

   - See [[file:examples/matlab-and-org-mode][./examples/matlab-and-org-mode/]] to get started. This directory contains a [[file:examples/matlab-and-org-mode/matlab-and-org-mode.pdf][PDF]] generated from
     [[file:examples/matlab-and-org-mode/matlab-and-org-mode.org][./examples/matlab-and-org-mode/matlab-and-org-mode.org]].

8. *tlc-mode* for editing ~*.tlc~ files. The Target Language Compiler (TLC) is part of Simulink®
   Coder™.

* Installation

** Install via ELPA or MELPA

Install via [[https://elpa.gnu.org/][ELPA]] or [[https://melpa.org][MELPA]]. MELPA contains the latest. To install from MELPA, add to your =~/.emacs=

#+begin_src emacs-lisp
  (require 'package)
  (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
#+end_src

To install from either ELPA or MELPA

: M-x RET list-packages RET

and click on matlab-mode to install.

** Install from this repository

Build:

#+begin_src bash
  cd /path/to/Emacs-MATLAB-mode

  # Build lisp and run tests (requires MATLAB executable):
  make

  # Alternatively, build lisp and run tests using a specific MATLAB executable:
  make MATLAB_EXE=/path/to/matlab

  # If desired, you can separate the building of lisp and running tests using:
  make lisp
  make tests
  make tests MATLAB_EXE=/path/to/matlab # if using a specific MATLAB executable
#+end_src

Add the following to your =~/.emacs= file:

#+begin_src emacs-lisp
  (add-to-list 'load-path "/path/to/Emacs-MATLAB-mode")
  (load-library "matlab-autoload")
#+end_src

* MathWorks Products ([[https://www.mathworks.com][https://www.mathworks.com]])

Emacs MATLAB-mode is designed to be compatible with the last six years of MathWorks products and may
support even older versions of MathWorks products.

* License

GPL3, https://www.gnu.org/licenses/gpl-3.0.en.html (see [[file:License.txt][License.txt]])

* Community Support

[[https://www.mathworks.com/matlabcentral][MATLAB Central]]

* FAQ

See [[file:doc/faq.org][doc/faq.org]]

* Mailing list

https://sourceforge.net/projects/matlab-emacs/

* Releases

See [[file:NEWS.org][NEWS.org]]

# LocalWords:  showall nodesktop melpa emacsclient matlabsection
