- Notifications
You must be signed in to change notification settings - Fork917
First Contribution
This tutorial assumes you have a basic familiarity with Clojure(Script) and using Light Table. If you don't, I recommendDavid Nolen's ClojureScript Tutorial and thefirst couple of tutorials. Let's get started on your first contribution!
The contribution you're going to add is a command for printing command stats. While such a command would normally be added through a plugin, we're adding it to Light Table here as an exercise. This tutorial assumes you're contributing to Light Table core. If you were contributing to a Light Table plugin, you would use a forked version of the plugin instead of a forked Light Table but most of the workflow still applies.
First, you'll need to fork Light Table and build a local version of itusing these instructions. The install script will take a few minutes. Once it's done, you can start an edge version of LightTable from the commandline e.g.deploy/light on OS X.
With Light Table open, add your fork as a folder using the commandadd folder. Then opensidebar/command.cljs with the navigate pane orCmd-O. The file you're looking at is responsiblefor the command pane you invoke withCtrl-Space.
Before writing the command, let's start a connection to eval ClojureScript. Run the commandAdd Connection and chooseLight Table UI. To confirm this works try evaling something at the bottom of the file e.g.(inc 1). PressCmd-Enter to eval that expression and see the result of 2. Be sure to only eval the given expression. When evaling in a core file such as this, evaling the whole file withCmd-Shift-Enter can have drastic consequences i.e. reset critical state.
It will be useful to have the console open while developing. Run the commandToggle console to open it at the bottom. Verify the console works by printing something e.g.(prn "Hey!").
Now you're ready to write a command. Let's add it to the bottom of the file. As you can see from other commands, thecommand function takes a map. That map must contain keys of:command,:desc and:exec that respectively are a unique id, a description you see in the command pane and the function invoked by a command. Let's start with a basic test command:
(cmd/command {:command:command-stats:desc"App: Print command stats":exec (fn [] (prn"TEST"))})
After evaling that expression, run the command by typing its description in the command pane!
Now let's add some actual functionality. Command information is stored in the atomcmd/manager under the:commands key. Eval the atom thinking of how you can get a command count. You'll want to eventually wind up with an expression similar to(-> @cmd/manager :commands count). Replace "TEST" with that expression and re-eval your command. You should see the command print your command count!
You'll notice the command currently prints to the console. While this is good for debugging, we can do better. Let's pull in the notifos namespace to improve this. At the top of the file add this in the :require section[lt.objs.notifos :as notifos]. After adding it,Cmd-Enter to eval it. Replaceprn withnotifos/set-msg!, eval and the count should now print in the bottom status bar!
If you spend more time playing with the command map, you'll see that commands can have additional keys e.g.(->> @cmd/manager :commands vals (map keys)). One such additional key is:hidden which is used to hide commands from the command pane. Try updating the command to include information about a public or hidden commands count. Here's one possible solution for how:exec could look to include that information:
(fn [] (notifos/set-msg! (str"Commands:" (->> @cmd/manager:commands vals (remove:hidden) count)" public /" (->> @cmd/manager:commands count)" total")))
Before finishing your contribution, it's important to verify this works without relying on eval. In order to do so, save your work and exit Light Table. Then from your Light Table fork directory, compile the latest ClojureScript withlein cljsbuild once. By compiling your ClojureScript to JavaScript, Light Table will be able to load the new command on startup. Open your edge Light Table and verify your new command is there.
And that's it! Congrats on working through this. Hopefully this will encourage you to make awesome contributions to Light Table.
Now that you have an idea of what it's like to contribute:
- Seewhere we could use your help.
- Check outall the tutorials to make sure you understand the different aspects of Light Table as a user.
- Learn more about internals at theFor Developers. If you have specific developer questions, they may already be answered in theDeveloper FAQ.
- Feel free to ask questions onthe mailing list.
We look forward to your contribution!