The Application object acts as the main hub within the Howl editor. There exists one and only one instantiated application object per Howl instance, available as



A list of currently open Buffer:s. The list is ordered by how recently a buffer was shown. Thus, a currently showing buffer will come before a buffer that is not shown, and not showing buffers will be ordered according to the timestamp they were last shown.


Points to the currently active Editor, if any.


A list of all existing Editor:s. Each editor can be placed in only one window at a time, but this list holds all editors present for the current Howl instance - regardless of whether they’re placed in the currently focused window or not.


A number providing information on how long the application has been idle, in seconds (with fractions). As the idle is reset upon activity this is useful primarily in timers and idle callbacks.


This is the most recent buffer that is currently not showing in any editor. If all buffers are currently showing it’s the first buffer in .buffers.


Points to the currently focused Window.


A list of existing Window:s.


add_buffer (buffer, show = true)

Adds the existing buffer to .buffers. If show is true, shows the buffer in the currently active editor.

close_buffer (buffer, force = false)

Removes buffer from .buffers. If the buffer is modified, and force is not true, the user is prompted before closing the buffer.

editor_for_buffer (buffer)

Returns the editor currently showing buffer, or nil if the buffer is not currently showing in any editor.

new_buffer (buffer_mode = nil)

Creates a new buffer, and adds it to .buffers. buffer_mode can optionally be specified to assign a specific mode for the new buffer directly. When not specified, the default mode is used. See mode for more information about buffer modes.

new_editor (options = {})

Creates a new Editor. Unless options specify otherwise, the newly created editor is added to the currently focused window, to the right of the currently focused existing editor. It’s set to show the buffer from the .next_buffer property. The editor is added to .editors before the return of the method.

options can contain any of the following keys:

Example use (Moonscript):

buffer =\new_buffer!
buffer.text = 'Show this text in the new buffer'\new_editor :buffer

new_window (properties = {})

Creates a new application Window. properties is table of window properties to set for the new window, such as title, height and width. The window is added to .windows before the return of the method. Returns the newly created window.

open (location [, editor])

Opens the specified location. By default, unless editor is specified, the location is opened in the currently active editor. Location must have either .file or .buffer set, and might optionally include additional information related to the display of the location. The available keys are:

Returns the Buffer and the Editor holding the buffer.

open_file (file, editor = _G.editor)

Opens the provided file. By default, unless editor specifies a specific editor to open the file into, the file is opened in the currently active editor. Emits the file-opened signal if the file was opened successfully. If the file was successfully opened, returns the Buffer and the Editor holding the buffer. Otherwise nil is returned.

pump_mainloop(max_count = 100)

Explicitly runs Howl’s main loop, at most max_count number of iterations. The number of actual iterations might be lower than max_count, should there not exist any work to do.

save_all ()

Saves all modified buffers in one go.

save_session ()

Saves the current editing session to disk. This includes things such as information about what buffers are open, the current state of the window, etc.

synchronize ()

Synchronizes all open files with their respective files, if any. This will cause any non-modified buffers to be reloaded from disk, should the file be more recently modified than the buffer.

quit (force = false)

Requests for Howl to quit. If any open buffers are modified, and force is not true, the user will be prompted for verification before actually quitting.