NoBlink Version 1.0


Nothing in the world annoys me more than a blinking cursor. Unfortunately, the cursors in the Matlab development environment always blink, and Matlab doesn't give you any way to turn off the blinking. I find blinking cursors very distracting, so I wrote NoBlink — a java package that tells all cursors in Matlab to stop blinking. Currently, NoBlink has only been tested on Linux Matlab R2007b, Mac OS X Matlab R2007a, Solaris Matlab 2006b and Windows Matlab R2008a, but it should work on other versions as well, so long as they use the Java version of the Matlab Desktop.

NoBlink is Open Source and Free Software, and is copyright © 2008, Samuel G Trahan. It is distributed under the GNU LGPL license, version 3 (or newer, at your discretion). The current version of that license can be found on the GNU website here. NoBlink's author is Sam Trahan and he can be contacted at samtrahan@samtrahan.com. If you find any bugs, or if you have successfully run NoBlink on new platforms or Matlab versions, please send an email.

How it Works

The Matlab Desktop on Linux, MacOS and Solaris is based on Java. Graphical user interfaces (GUIs) in Java are made up of GUI components (windows, text boxes, buttons, scroll bars, etc.) Each GUI component can contain any number of child GUI components. For example, the Matlab window contains the menubar GUI component, the command window GUI component, some toolbars and other things. That creates trees of GUI components, with the root of each tree being a window. NoBlink recurses through all of these trees of GUI components, disabling all blinking cursors that it finds.

Matlab will re-enable blinking cursors in various windows every once in a while, even though NoBlink has turned off the blinking. To get around that, NoBlink runs in the background, and looks for blinking cursors every once in a while. When it finds them, it tells them to stop blinking. NoBlink monitors how much CPU time it uses, and it will search for cursors less frequently if it finds it is taking too much CPU time.

Using NoBlink

In order to run NoBlink, you must tell Matlab the location of the NoBlink archive. There are two ways to do this and one or both may work for you, depending on the particular setup of Matlab on your machine, and your network. After you tell Matlab where to find NoBlink (by either method), you must run NoBlink's start() function.

Method 1: Have Matlab Download NoBlink for You

If you're lucky, then Matlab will let you type in the web address of the NoBlink archive, and then Matlab will download NoBlink for you. Try this code:

javaaddpath http://www.samtrahan.com/noblink/noblink.jar
NoBlink.start()

If that works, you should get a message from NoBlink welcoming you "back to sanity," and your cursors should stop blinking. You will have to re-run those commands every time you start Matlab. If Matlab does not want to download NoBlink for you, you may get one of a variety of error messages and the cursors will keep blinking. If so, move on to method 2, described below.

Method 2: Download NoBlink Yourself

Sometimes Matlab, a firewall or your lack of an internet connection will prevent method 1 from working. If that happens, you can download NoBlink's archive file yourself and point Matlab to the downloaded file. Use the link below, but use your browser's "save link as" feature to save the file to disk. Simply clicking on the link might cause your browser to try to use that file as a Java applet. Usually, right-clicking on the link will bring up a menu (or control-click on a mac). Then you can choose "save link as" to save the file on your computer.

http://www.samtrahan.com/noblink/noblink-1.0.jar

You do not need to extract the contents of the archive — Matlab will use the archive file directly. Every time you start Matlab, run these commands:

javaaddpath('/path/to/noblink-1.0.jar')
NoBlink.start()

If you still can't run NoBlink, move on to the troubleshooting section.

Troubleshooting

First off, NoBlink only works if the Matlab Desktop is running. In command line mode, there is no Java GUI, so NoBlink can't do anything. Secondly, if you typed the path to noblink-1.0.jar incorrectly, you will get this error when you run NoBlink.start():

??? Undefined function or variable 'NoBlink'.

If that happens, rerun the two commands, but with the correct path in the javaaddpath command. If you have trouble finding the file, you can have Matlab open up a file chooser window which will make it easier to look for the file. To do that, use these commands:

[a,b]=uigetfile('*.jar')
javaaddpath(fullfile(b,a))
NoBlink.start()

That will have the side-effect of creating a and b variables though.

Source Code

The source code to NoBlink is included in the noblink-1.0.jar file and it can be extracted by the Java jar command. The source code is mostly Java, but some of it is automatically generated by a Perl script. There is a Makefile that automates the complete compilation process. The NoBlink source code is covered by the same license as the rest of NoBlink (see the top of this page for details).

Additional Functions

NoBlink contains functions other than start(). You can get descriptions of the various functions by running NoBlink.details() which will print out something like this:

NoBlink version 1.0
A Java class that stops cursors from blinking in Matlab.

  NoBlink is Copyright (C) 2008 Samuel Gerard Trahan and is available
  under the GNU LGPL license.  Run NoBlink.license() for details.

  NoBlink's webpage is currently:
      http://www.samtrahan.com/NoBlink.html
  Check that website for new versions of NoBlink.

  NoBlink.start(silent)
    Start NoBlink.  This will immediately stop all cursors from
    blinking and it will cause NoBlink to run in the background,
    watching for other blinking cursors, and telling them to stop
    blinking every time it sees them.  If NoBlink was already running,
    start() will stop NoBlink and start it again.  If silent is true,
    then NoBlink will not print out its start message.

  NoBlink.tranquility()
    This merely stops all current cursors from blinking.  It does not
    start NoBlink, and so it will not stop some future cursors from
    blinking, unlike start().

  NoBlink.stop()
    If NoBlink is currently monitoring the cursor (as described in
    start() above then stop() will tell NoBlink to stop monitoring the
    cursor.  Calling stop() will not cause any cursors to immediately
    start blinking, but it will prevent NoBlink from running in the
    background, stopping cursors from blinking.  Since Matlab turns on
    cursor blink periodically, cursors will start blinking eventually
    if you call stop().

  NoBlink.help()
  NoBlink.details()
    The help() function prints a short help message, details() 
    prints this help message.

  NoBlink.license()
    Print NoBlink's license information.

  NoBlink is Copyright (C) 2008 Samuel Gerard Trahan and is available
  under the GNU LGPL license.  Run NoBlink.license() for details.