Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating custom build system for MATLAB through Sublime Text 2

I have been editing my .m files in Sublime Text 2 (henceforth referred to as Sublime for the remainder of my question) for quite some time now, and having recently become accustomed to using the build function in Sublime for running Python code, I was trying to setup something similar for MATLAB files. I am attempting to do this because I am tired of running my code and editing my code in separate windows.

Following the documentation, I tried using this very reasonable seeming code below, where the '-r' flag launches MATLAB to run my file, the "-nodesktop" flag launches MATLAB without the big hulking Java GUI, and the "-nosplash" flag launches MATLAB without the unnecessary splash screen. The selector allows for Sublime to automatically use this build system on m files, and the path variable sets the path to the directory that will launch MATLAB (directory found by running "which matlab").

I am aware that I can set an preferred text editor from within the MATLAB GUI, but I am not interested in doing that. I am interested in using Sublime as a build system in addition to a text editor.

{
    "cmd": ["matlab", "-r", "-nodesktop", "-nosplash", "$file_name"],
    "selector": "source.m",
    "path": "/usr/local/MATLAB/R2012a/bin"    
}

Upon running build on my errorless .m file, I find this error below, which doesn't make sense. I don't think it makes sense because have launched MATLAB with the standard command line options, and am receiving MATLAB internal errors, too.

/usr/local/MATLAB/R2012a/bin/matlab: 1: /usr/local/MATLAB/R2012a/bin/matlab: awk: not found
/usr/local/MATLAB/R2012a/bin/matlab: 1: /usr/local/MATLAB/R2012a/bin/matlab: expr: not found

Internal error 2: Could not determine the path of the
              MATLAB root directory.

                  original command path = /usr/local/MATLAB/R2012a/bin/matlab
                  current  command path = /usr/local/MATLAB/R2012a/bin/matlab

                  Please contact:

                      MathWorks Technical Support

                  for further assistance.

[Finished in 0.1s with exit code 1]

Has anybody else had problems like this invoking MATLAB scripts via an alternate build system? I have not tried to set up a build system for MATLAB in Sublime on any other operating system besides Ubuntu 12.04, if that information is useful.

It works now! Here is my Matlab.sublime-build:

{
    "cmd": ["/usr/local/MATLAB/R2012a/bin/matlab", "-nosplash", "<$file_name"],
    "selector": "source.m"
}

Update: I'm now hosting Sublime Text 2 R2012a build files for Linux and for Mac on my Github page as examples: https://github.com/jessebikman/Sublime-Text-2-build-Matlab-code

like image 550
JesseBikman Avatar asked Aug 08 '12 17:08

JesseBikman


People also ask

How do I create a Build System in Sublime Text?

Sublime Text is able to run build programs such as 'make', either when a key in pressed (F7 by default), or when a file is saved. The build system to use can be select from the Tools/Build System menu. If a project is open, the selected build system will be remembered for the project.

Does Sublime Text support Matlab?

So there is a package called SublimeREPL (https://github.com/wuub/SublimeREPL) that make use of this property and runs MATLAB directly from Sublime Text. You can also use that for this purpose.

Can you compile with sublime?

Sublime Text provides build systems to allow users to run external programs. Create a new build system for Sublime Text for setting up C++ compilation. Open Sublime Text editor and then go to Tools > Build System > New Build System.

Where Are Sublime Text build systems stored?

All global configuration for Sublime (including installed packages) is stored in ~/. config/sublime-text-3 (or %APPDATA\Sublime Text 3 on Windows, or ~/Library/Application Support/Sublime Text 3 on Mac).


2 Answers

I am a sublime newbie, but this worked for me. I believe you have two problems:

  1. Figure out how to set the PATH environment (that Sublime sees) to be that of the unix command prompt. On a mac, I had to setup a file called environment.plist and add the path there. This should get rid of your awk and expr errors.

  2. Here is my matlab.sublime-build:

    { "cmd": ["/Applications/MATLAB_R2011b.app/bin/matlab","<$file_name"] }

Note the < just before $file_name.

This isn't perfect: adding the nodesktop and nosplash options lead to errors. As the build script stands now, the program runs fine in the terminal, but I still get the splash.

like image 114
Rob Avatar answered Sep 28 '22 22:09

Rob


just tried to get my Matlab code compiled through Sublime. Plugged in your sublime-build snippets and it works, thanks for that! However, I usually code computer vision related stuff where you kinda do this a lot:

    img = doImageConversion();
    imshow(img);
    pause;

    img = doAnotherImageConversion();
    imshow(img);
    pause;

The issue here is that sublime does not halt on pause instructions. You may overcome this by replacing the pauses by pause(3). Not quite satisfying though! To make the build actually halt I found these Matlab.sublime-build settings pretty handy:

{
    "cmd": ["xterm", "-e", "matlab", "-nosplash", "-nodesktop", "-r", "run $file_name; quit;"],
    "selector": "source.m"
}

This requires xterm to be installed on your linux distribution. Now Sublime will start the xterminal running the Matlab file over there, actually halt on pause instructions and quit in the end. I didn't test this snippet on older Matlab versions.

Cheers lustiz

like image 44
lustiz Avatar answered Sep 28 '22 21:09

lustiz