shill logo
semi up-to-date LSL editing for all
picture of a shillelagh.

Shill updates syntax files for a variety of editors used for Linden Scripting Language (LSL) code. With these files, you'll enjoy proper syntax highlighting in your favorite editor. New in this version: the Shill keyword lists are now based on source files from the Second Life client.

Included here are files I found at the LSL Alternate Editors page at the LSL Portal, along with some I saw mentioned in various forums. My sincere thanks to all syntax file authors. I've included the origin of each file if known. Follow the instructions at the Wiki for installation, including updated files from here as appropriate.

See below for more details on the automated process that generates these files. Please contact me with comments, suggestions, and requests to update these or other syntax files. You are also invited to discuss Shill at the Second Life Forums.

elsewhere in the Marker network: Interested in command line image upload? Try redcap

files for Second Life 1.23.4 (updated 19 August 2009)

editor files notes
sample file sample.txt
text file including all LSL flow control, data types, constants, events, and functions, one per line
BBEdit / TextWrangler lsl.plist
This plist file (original from Captain Barmy) is a "codeless language module" which works with BBEdit 8.x and TextWrangler 2.x. It support syntax highlighting. The update for 1.13 also updates BBLMLanguageCode to LLSL as advised by Herbert Hoggard.

BBEdit also supports a binary module, which can enable the function popup and more highlighting. I'll post one of those if I can figure it out.
Code-Genie lsl.cgsyn
original file from Tread Whiplash
ConTEXT lsl.chl
original file from Sir Grelling via the ConTEXT site.
Crimson Editor lsl.key
original file from Templar Baphomet (posted at Crimson Editor Syntax Files) and updated by Aakanaar Lasalle
Eclipse The most current Eclipse environment I'm aware of is from ByronStar Comet: ByronStar Second Life IDE.
EditPlus Linden Scripting Language.stx
original file from Ezhar Fairlight
Emacs 1) lsl.el from Phoenix Linden
2) lsl-mode.el from Reinhard Neurocam

These files are written in Emacs Lisp, and I cannot figure out how to update them. If you are an Emacs Guru and would like to see an update, please contact me and I'm sure we can figure it out.
gedit lsl.lang
original file from Nargus Asturias via the Scripting Tips forum. gedit is the official text editor of the GNOME desktop environment.
jEdit lsl-edit.xml
original file from Keilaron Tomba
Kate/KWrite lsl.xml
original file by Dale Glass via Second Tux
lslint builtins.txt
lslint Note their published builtins file preserves the order from the original SL client source file which is (roughly) the order the function was added to Second Life. Shill generates things in alphabetical order. The file only lists functions so lslint still may not be able to recognize the new event http_request.
MoinMoin Wiki
original file from Thilo pfennig. I added functions, events, and all constants to this file, but I have not been able to test it. They use keyword types 'ResWord2' and 'Special'.
Notepad++ lsl.api
original file from Samson Havercamp. The XML file supports syntax highlighting. The API file supports auto-completion (ctrl-space).
SciTE lsl.api
original files extracted from SciTE-ez (from Ezhar Fairlight)
See the forum thread New SciTE files for lsl, for another set of files updated 08-Sep-2007 by LordJason Keisler.
Smultron lsl.plist
original file from Seraph Bedlam
SynEdit The original file (from Nightwalker Shatner) includes many Pascal functions generated by the SynEdit program. If someone would like to run the generator thing, I can provide an updated keyword list, and would be happy to host the file here.
TextMate Download Piero Padar's well-maintained bundle, discussed in the Second Life Forums.
TextPad Linden Scripting Language.syn
Linden Scripting Language.tcl
The original files (from Sean Gorham) placed some constants in other categories (e.g. NULL_KEY in events), which I was not able to reproduce. Also, numeric constants no longer have their own category.
UltraEdit LSL-Wordfile.txt
There were three different files in the Wiki. I chose what appeared to be the most recent (from Grazel Cosmo). That file had only a handful of constants; the updated file includes all constants.
vim lsl.dict
original file from Keedon Pollack (and updated by others). lsl.vim is the full syntax file. The deprecated functions list needs to be updated. lsl.dict is a vanilla list of all the keywords that can be used with vim's autocomplete function.

the Shill master files keywords.yaml

Shill's master lists of functions, events, and constants. They are formatted using YAML, a simple markup language.
  • keywords contains just the event, function, and constant names.
  • signatures has signatures and short help for functions and events (currently only used by SciTE-ez). See implementation notes below for more details.
  • shill.rb reads the YAML files and inserts the keyword lists into the editor configuration files.

If you just want to update your editor keyword list, grab your files from up above and enjoy. If you have a file that you would like me to include in the Shill automatic update, please send it to me. If you're interested updating your own files, or are just curious about the internals of Shill, read on.

implementation notes (and how to run Shill yourself)

Download the entire Shill system in one archive (236K):

I welcome your feedback. IM or email Adam Marker.

Shill is implemented using several Ruby programs, two keyword files, and a fixed folder hierarchy for holding template and output files. Shill reads files from the template directory, inserts current LSL keywords, and deposits the new file in the site directory. The setup looks like this:

Typical shill command invocations:
   erb index.html.erb >site/index.html  (does everything)

   ruby make_yaml.rb           (extract keywords from LL source files)
   ruby shill.rb template/*/*        (to generate all syntax files)
   ruby shill.rb template/jedit/*    (to generate just the jedit files)
The erb file knows how to find everything, convert everything, then insert everything into a ready-to-publish HTML file. You can also perform the steps one-by-one if you like.

make_yaml reads the keyword and function lists from Second Life client source files, and writes two YAML files. keywords.yaml contains three lists of names, one each for constants, events, and functions.

shill.rb reads each template specified on the command line, and produces a new file with the same filename, in an output folder called "site". There is no configuration file of editor and file names; it is all inferred from the folder hierarchy. For example:

      template/smultron/lsl.plist -->> site/smultron/lsl.plist
A template file may contain RDoc and erb code. If you don't know what that means, skip the rest of this paragraph. Take a look at template/vim/lsl.api for basic use of RDoc, and template/notepad/userDefineLang.xml for an erb sample. The template is passed first through RDoc, then erb. RDoc is sufficient for most templates (one keyword per line, sometimes with extra text on the line), and erb can handle advanced formatting and selection needs. For erb, three arrays are defined to hold LSL events, functions, and constants. There is also a hash that holds event and function signatures. notepad/userDefineLang.xml uses the arrays; scite/lsl.api uses both the arrays and hash.

If you have no experience with Ruby, I think you can still use Shill to create or update editor syntax files. Here is a basic example, taken from template/bbedit/lsl.plist:

START: and END: (which must begin in column 1) tell Shill where to insert a keyword list, and which list to use -- in this case 'functions'. If the editor requires it, you can have other text on the line, like the XML tags in this example. The line is repeated once per keyword, substituting a keyword in place of %name%, generating something like:
Each of the files now contains a Shill update notice, in addition to any other version history the original author may have provided. A template may include the following line (along with proper syntax for a comment):
and generates an update notice like this:
     LSL keywords updated 19 Dec 2006 for LSL 1.13 by
You may also want to update the keyword lists. Take a look at the two YAML files -- you will find it easy to adapt to YAML formatting.

The name Shill: