Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Release Notes: Sprint 18
Note that this build has a new download location: http://download.brackets.io/
This final sprint of 2012 focused largely on architectural work preparing for future sprints, so there are fewer new features than usual (and more API changes).
What's New in Sprint 18
- Code hint provider API improvements: APIs for all code hints have been streamlined to support multiple hint providers per language more cleanly, remove bug-prone pitfalls, and do less processing per keystroke. Details below and in the API spec and JSDocs; background in the functional spec and forum.
- CSS cursor-context API: New CSS-parsing functionality was added to support the ongoing effort to add CSS code hinting in a future sprint. Details below and in the API spec.
- Don't hint attributes already on an HTML tag
- Toggle Line Comment for CSS & HTML: Toggle Line Comment now inserts/removes one-line block comments instead of doing nothing.
- Enable Python syntax highlighting
- Progress on CodeMirror 3 migration: Inline editors are now mostly working on the cmv3 branch, with one major exception: they are not always the correct height.
- Select most recently visited file after Close: Previously, the bottom-most file on the open files list was always selected.
- "Search bars" (Find, Replace, Quick Open) no longer cover up search results that occur in the first 2 lines of code in the viewport.
- Research language extensibility: Planning for for a future feature to allow extensions to add support for new file types. As a guinea pig, we're working on moving LESS support from core out into an extension.
- The About dialog now indicates whether Brackets is running in post-"setup_for_hacking" mode (pointing at git source repo) or normal mode (source in the installation directory). Look for the text "development build" (hacking) vs. "experimental build" (normal).
No major changes to existing features.
- registerHintProvider() - When registering with CodeHintManager, hint providers must now specify a list of supported CodeMirror mode names (e.g., "html" or "css"), and an integer priority (the UI is currently "winner take all," so the first provider to offer hints for a given mode is the only one whose hints are shown). Higher numbers should be used for providers that are more specialized (higher specificity).
- Hint provider interface - Code hint providers must now implement a different, simpler interface. There are three required methods:
hasHints()- Indicates whether a provider is willing to provide hints for the current editor and cursor location, and begins a new hinting session if so.
getHints()- Returns either an immediate, synchronous response or a Promise that will eventually resolve to the response; the response contains a list of hints along with several other parameters.
insertHint()- Inserts a hint into the current editor context and indicates whether code hints should remain open afterward (updated for the new cursor position).
- Complete API details available at: New Code Hinting API Proposal
- InlineWidget now automatically adjusts its width to match the host editor (see
- Widgets no longer have to provide an
_editorHasFocus()method or override
close()to avoid crashes when that function doesn't exist.
EditorManager.closeInlineWidget()no longer takes a
moveFocusparameter. Instead, it auto-detects whether the inline widget has focus.
EditorManager.getFocusedInlineWidget()now returns any focused InlineWidget, not just subclasses of InlineTextEditor. It returns the widget directly instead of a bag containing it.
- If you override
InlineWidget.onClosed(), chaining to the original method is now required since it's no longer an empty stub.
- New APIs:
NativeFileSystem - several changes to match the latest Directories and System draft spec:
requestNativeFileSystem() - successCallback is now passed a FileSystem object with a
rootDirectoryEntry property (instead of being passed the DirectoryEntry directly).
FileError -> NativeFileError (which implements DOMError) - For error codes,
DOMError.nameand the constants for these values have moved from FileError to the NativeFileError enumeration (in its own separate module).
- JSDocs in NativeFileSystem are much improved
Toolbar icons - Any icons added to the
#main-toolbar > .buttons div must be 16px tall; otherwise all icons in the toolbar will become misaligned.
Native shell build - The brackets-shell build procedure has changed. Note: you only need to build brackets-shell if you're editing the native shell code - editing Brackets' HTML/JS/LESS code does not require this. To set up for the new build environment, follow the updated build setup instructions. You can follow these steps either on a fresh clone of brackets-shell or on an existing environment that was previously using the old build setup.
Warning: do NOT attempt to use the new build process on Windows XP. Building brackets-shell is not supported on XP, and the new scripts could delete your entire Brackets repo as a result (specifically, if you have a pre-existing XP build environment rigged up that you run these scripts on).
New/Improved Extensibility APIs
CSSUtils - Use
getInfoAtPos() to get info about the CSS code near a given cursor position, similar to the longstanding
Key bindings - to decline to handle a key event, a command can return a Promise that is already (synchronously) rejected at the time it's being returned. Other code or the browser default action will then handle the event. This is useful when you don't want to a bind key globally - e.g. the Emmett extension handles the Enter key when the focus is in an HTML editor, but not when the focus is in the Find bar.
It is now possible to specify a default platform-agnostic keybinding alongside one or more platform-specific bindings. This is a useful distinction as the experimental Linux build continues progressing.
ExtensionUtils - new APIs:
addEmbeddedStyleSheet()- Appends an inline
<style>tag to the document's head.
addLinkedStyleSheet()- Appends a
<link>tag to the document's head and tracks its loading.
parseLessCode()- Converts LESS code to CSS code.
getModulePath()- Returns the local disk path of an extension module.
getModuleUrl()- Returns the
file://URL of an extension module.
loadFile()- Loads a file from an extension-module-relative path.
- The existing
loadStyleSheet()now supports .less files in addition to .css
#1551: Changes within an extension (or a unit test) are not reflected by a simple "Debug > Reload Brackets." Workarounds:
- Quit and re-launch Brackets to pick up the changes.
- Open Developer Tools, click the gear icon in the lower-right, and select "Disable cache." This setting is remembered, but is only in effect so long as the Developer Tools browser tab remains open.
- Debug > Run Tests is disabled in the installer/DMG distributions of Brackets, because the unit test code is not included. To run unit tests, pull Brackets from GitHub instead.
- Debug > Show Developer Tools opens in a new tab in Chrome, rather than a new window in Brackets.
- #1283: Text selection highlight sometimes jiggles when horizontally resizing window.
- Mountain Lion (OS X 10.8) by default will not allow Brackets to run since it's not digitally signed yet. To work around this, right click the Brackets app and choose Open. You only need to do that once -- afterward, launching Brackets the normal way will work also.
- #2272: Windows Vista may not allow the Brackets installer to run (you may not see any error message). To work around this, right-click the installer file, choose Properties, and click the Unblock button.
Community contributions to Brackets
- Select most recently visited file after Close by Tomás Malbrán
- Line Comment for CSS & HTML (1-line block comment) by Tomás Malbrán
- Enable Python syntax highlighting by Justin Abrahms
- Filter out Python .pyc files by Justin Abrahms
- Don't code-hint attributes already on an HTML tag by Chema Balsas
- Default to Windows keybindings on Linux based on earlier work by Pritam Baral (note: Linux builds are experimental; see forum thread for more info)
- Russian translation (and) by "noway421", reviewed by Arty Bolembakh, and inspired by Vladimir Aus's original
- Update Quick Open text field label based on mode inspired by Sagar's original
- Fix several block comment issues (and) by Tomás Malbrán
- Fix #2085: Can't use File > New File on collapsed folder by Chema Balsas
- Fix #2270: JSLint star missing tooltip if disabled on startup by Tomás Malbrán
- Check for updates daily even if Brackets left running by "J.M."
- Enable Haxe syntax highlighting on cmv3 branch (not available in mainline Brackets yet) by Andy Li
- Use ellipsis symbol instead of dots in menu items by "J.M."
- requestNativeFileSystem() should return FileSystem to match spec by Chema Balsas
- NativeFileSystem should use NativeFileError to match spec by Chema Balsas
- NativeFileSystem documentation and examples by Chema Balsas
- Color editor CSS cleanups by "J.M."
- Spanish translation update (and) by Chema Balsas
- German translation update (and) by "J.M."
- Add CONTRIBUTING file by "J.M."
Contributions from Brackets
Contributions to CodeMirror:
- Unit tests for line focus restoration
- Ignore certain events when target is inside a line widget
- Track global variables alongside locals in the parser state
- Use globals as well as locals in hinting
Bugs fixed in Sprint 18
For details on the bugs addressed, please refer to closed sprint 18 bugs. A few of the fixed bugs might not be caught by this search query, however.