Besides tons of bug fixes, here is the main enhancements since the last version:

Support for octal numbers in the interpreter.

Braces, brackets, markups and strings are now closed automatically.

Read the instructions there.

If everything was fine, type "gambas3" to run the development environment.

Enjoy it !

Add (short) commit hash and branch name to gb{a,c,i,x}3 --version when compiled from git

Use file icon and file preview in file autocompletion.

SUPER and ME always show all hidden symbols.

Do not hide constants having underscore inside. Only those starting with an underscore.

Hide symbols having an underscore in it, unless you have entered an underscore just after the point.

Selecting a title line in the procedure pop-up does not move the cursor at the top of the file anymore.

Do not open the signature popup if we are inside a string.

New toolbar button and dialog for inserting special characters.

Limit the number of colors in the color popup menus.

Automatic variable declaration with INC and DEC instructions.

Added support for nested WITH expressions in code completion.

The message label now moves if the editor is resized.

Add a button and a popup menu to insert today's date in many different formats.

Fix indentation of code beautifier on lines ending with an operator and on strings spread over multiple lines.

Try to keep the cursor on the same line after the code has been made pretty.

Add groups to the procedure list popup for event handlers and hidden public methods.

Code beautifier should not lose breakpoints and bookmarks anymore.

Move option buttons to the right of the toolbar.

Completion of identifiers is faster now.

Fix procedure popup management so that the focus starts on the current procedure.

Do not try to open a newly created connection if a password is required but not provided.

Use the table stock icon to create the system table icon.

Display the record counts of tables and SQL queries.

Add a "no password" option to the connection dialog, to tell that no password is needed when connecting to the database.

Switch to the debugging panel at startup, and automatically switch to the console only when something is written in it.

Don't allow to change breakpoints while the project is running, as the internal debugger does not support it.

Don't try to save breakpoints when dealing with a "fake" project.

Fix the search result panel layout according to the new debugging panel close button.

When there is no warning anymore, the warning panel now is automatically hidden.

Add a close button on the top right of the debugging panel.

Use the console font for the local variable tree.

Merge the "Watch" panel into the "Debugging" panel.

Merge the "Local variables" and "Current object" panels in one "Debugging" panel put to the left. Put the stack backtrace in that new panel.

Multiple breakpoints can be selected at the same time now.

Breakpoints now can be disabled.

Fix position of controls dropped from the toolbox.

Enhance font popup by grouping font having similar names in the same menu hierarchy.

Add a toolbar button that toggles the tooltip visibility, with the F6 key as shortcut.

Double-clicking on the form title now opens the menu editor.

Use the same font size in the property help as in automatic completion.

Opening the text property dialog now displays correctly the current value of the property.

Fix a possible crash when loading forms with Scaled property set to FALSE.

Embedding controls in a new container now takes the form family into account.

Don't load the help browser form immediately to speed up IDE starting.

Try to guess a monospace font that matches the default font.

Always display buzy cursor when opening it.

Add a toolbar button that toggles the tooltip visibility, with the F6 key as shortcut.

Using SHIFT with the draw tool allows to pick a color from the current image.

Double-click now hides the selection, and single click never hides it.

The ALT key is now used for rotating or drawing a line with an angle that is a multiple of 15 degrees.

Highlight the last point with the "draw" and "erase" tool.

Setting the grid snap to zero is now equivalent to default half-pixel snap.

Use custom mouse cursors that are more visible on a gray background.

Enhance the behaviour of the "paste" tool.

The keyboard arrows now move the current paste or the current edited selection.

Separate the grid resolution and the grid snap.

The visibility of some toolbar icons was incorrectly managed after a project state change.

Add a menu entry in the "run with arguments" menu that opens the project property dialog directly on the "Arguments" tab.

Menu buttons of the main toolbar are now correctly disabled like standard menus.

The project filter now takes the project version into account.

Add a project tab to the option dialog for projects global options.

Add an option not to separate static symbols in the editor methods selector.

Remove stock themes from the theme list as they are now returned by the Stock.Themes property.

Add an option to toggle automatic closing of braces, brackets...

Change the look of the background panel of the option dialog.

Ensure that the terminal screen width is accurate even if the output console has not been shown yet.

Add a new button to the console output that suspends the terminal.

Replace "

" by "\r

" when sending text to the output terminal.

Add a button to create the package immediately if possible.

Add the total time minus time spent in the event loop outside of Gambas functions in the window title.

New project option to show or hide the deprecated components and controls.

Library information is correctly refreshed when a library has been installed or uninstalled.

Do not crash if a file has no mime-type or no associated icon.

Opening an unknown binary file automatically uses the first program associated with its mime type.

If a project file is a symbolic link to a file of another project, show a menu entry allowing that file to be opened in its project so that it can be modified.

The icon of database connections that can be used as a template now use the "exported" emblem.

Rename files or move them should update all internal data correctly now.

Renaming now keep the expanded items.

Emblem for modified files that must be committed.

File emblems are drawn in a more readable way now.

When a child class is not stored in the same directory of its parent class, its icon gains the link emblem.

Refreshing the project tree now keeps the expanded state of expanded items.

Correctly refresh startup class in all cases when changing it.

Any source file can be marked as not translatable, not just folders.

A source folder now can be marked as "non translatable". Every source inside will not be taken into account by the translation dialog.

Do not crash anymore if the last searched window has been closed.

You cannot replace in read-only files anymore.

Replace is correctly disabled when the project is running.

Tighten the categories, and add a vertical scrollbar if there is not enough space to display all of them.

Reset to the default farm if the current farm is removed from the farm list.

Do not scan /lib if it is a symlink of /usr/lib , and do not store intermediary results.

Add pretty print of CSS, C, C++, and Javascript files.

Add a button and a popup menu to insert today's date in many different formats.

Move option buttons to the right of the toolbar.

Add comment and uncomment feature, according to the type of the file currently edited.

Add a toggle button for indenting with tabs or spaces.

Generate missing .mo files at each compilation, according to the current language in use. The project LANG environment variable defined in the project property dialog is taken into account.

A failing msgmerge command does not prevent the loading of the translation file.

A translation could be lost when a class or a form us marked as not to be translated.

Add the number of untranslated strings in the statistics.

The translation verification button always move to the next problem.

Conflicting files have now their own editor. Solving conflicts is done from that editor. Beware that binary files are not supported yet!

The subversion specific dialog has been removed, and is replaced by a commit dialog and sub-menu entries in the "Project" menu.

Add an option to enable or disable version control management.

If there is nothing to commit, and if the repository has a remote origin, then pushing is possible.

Putting a project under version control with Git works correctly now.

Git repository without remote are not pushed.

Projects can be put under version control. A new Git repository is created for the project if no parent Git repository is found.

Fix handling of metadata of files not stored in the project. No infinite recursion anymore.

Added files are now marked as modified with Git.

Modified state is now correctly refreshed when files are saved.

Print shell command output if there was an error.

Ability to switch to another branch.

Support for ssh asking to confirm unknown hosts.

Commit window got a "do not push" check box if Git is in use.

Allow commit user & password to be remembered.

Always display commands output if requested, but once.

Do not crash when there is nothing to commit.

Removing a project from the recent project list should not crash anymore.

Do not crash anymore when clicking many times on the project remove icon in recent project list.

The project filter entered in the welcome dialog is now transmitted to the open project dialog.

Move lock icons to the right of the toolbar.

Remove all explicit form positions, so that they are now automatically centered.

Do not crash if the current project is deleted by another process.

Use text colors inverted for form and image editor tooltips.

Support for the new interpreter error message "Free object referenced".

Use system tooltip colors for form and image editor tooltips.

Use the "vector" stock icon for .svgz files too.

Use the new "vector" stock icon for svg images in the project.

Do not write the comment line # Compile with Gambas 3.X.X in the .project file anymore.

Using pretty printing on load or save does not crash anymore.

Make the Gambas theme current line color lighter, so that there is more difference with the selection color.

Ensure that path arguments are quoted when using the SHELL instruction.

Use the same stock grid icon in all editors.

Fix an incorrect test indirectly detected by the recently fixed compiler static datatype checking.

IDE startup is faster now, by loading the help browser as late as possible.

Use the new Spring control here and there.

Support for the new Spring control.

The "Update all forms" action now do not crash anymore on forms that do not use the form editor.

Automatically update the copyright date in the licence file.

Fix the width of SwitchButton according to its new look.

Don't use file emblems in menu and workspace icons.

Form emblems now take the class file into account.

Browsing the project after a file has failed to open does not crash anymore.

Fix some icons that were too dark.

Start making some icons 32x32 pixels for a better look in big toolbars.

Don't open the console if the compilation is successful.

Fix analyze of boolean constants of the current project.

Allow relative symbolic links of imported files to go up six directories instead of four.

Do not run konsole with arguments it does not understand anymore for no reason.

Add .settings to the .gitignore files of projects.

File properties: Undoing the changes correctly resets the change tab.

About dialog: Little redesign of the introduction of the about message.

Fix scrolling to an anchor with a CSS trick.

The {@classes} command can take arguments to add custom classes to the list of classes.

The download link now points at gitlab.

Add a link to the playground made by Adrien.

New syntax for octal numbers: &Oxxx .

Add an API that allows to create an array class before instanciating it.

Collection.Last is a new property that returns the key of the last element of the collection, or NULL if the collection is void.

Collection.First is a new property that returns the key of the first element of the collection, or NULL if the collection is void.

Process.Wait() does not freeze anymore when the child process actually ends before checking the end of the process just after having run it.

Flush the process outputs when it stops immediately after having been launched.

Fix pseudo-terminal initialization when running an external process with EXEC or SHELL.

When a process is run with a pseudo-terminal, don't set the ECHO flag, and clear the ONLCR flag.

Check the result of tcsetattr() carefully, as it returns an error only if none of the flags has been set, not just one.

Initialize pseudo-terminals with ECHO and don't clear OCRNL flag. This is not compatible with previous versions, as now, by default, printing a NL will become CR+NL through the pseudo-terminal.

Initialize master terminal of processes run inside a pseudo-terminal before forking.

Initialize pseudo-terminal with ICRNL too.

Don't use CLOCK_MONOTONIC_RAW if the constant is not defined.

Remove undocumented feature in format strings.

Take \ escape character into account correctly in format strings.

Translate comments in english.

RDir() now does less stat() system calls, by assuming that the number of hard links of a directory is its number of sub-directories plus two.

Dir() does not loop indefinitely anymore when browsing an archive file with a void pattern.

Add an API that returns the first element of a hash table.

Rework the stream interface, so that the stream read & write methods just have to actually read or write the data.

Fix internal stream buffer management, and STREAM_read_max() function.

Fix a crash when an error occurs inside a constructor that is called from another constructor.

Fix error management that could lead to other potential crashes.

Array construction operator now accepts class names as Variants.

Val() and Eval() now correctly read binary and hexadecimal numbers with the maximum number of digits.

Oct$() is a new functions that converts an integer to its octal representation.

Lof() should work correctly now on streams having a specific implementation of Lof() function.

Correctly attach newly created objects.

Fix internal renaming of overridden classes, and use the ^ character instead of > to name them.

The gb.Descent flag could be erased when sorting objects implementing the _compare special method.

gb.Match is a new constant that indicates a string comparison using the PCRE MATCH operator.

Component.Version is a new property that returns the version number of a loaded component. If the component is a user library, you get the version number of that library. Otherwise you get the current Gambas version.

Component.Library is a new property that returns if a component is actually a user library.

LOCK instruction now can be used on existing files without clearing them.

Use a dedicated stream for locks, so that the File object returned by LOCK cannot be used for reading or writing the locked file.

Fix symbol table binary string comparison for non-ASCII characters.

When a task terminates, clean up the temporary directory and exit.

Tasks do not print memory and objects clean up warnings anymore.

Remove the task output serialization file when it is freed.

Don't crash when building a collection with the bracket operator if one of the value is a class.

Class.IsLoaded() is a new static method that returns if a specific class is loaded.

Fix an uninitialized flag in streams, that make watching real files for reading incorrectly raise the Read event.

Fix a possible memory leak when using the Stream.End() method.

Deleting a collection item while the collection is enumerated does not crash anymore.

Writing to a stream does not crash anymore if the stream is closed while the data is sent in several shots. Socket stream implementation should not close the stream while writing.

The AND, OR, XOR and NOT operator now can take a Date, that is converted to boolean.

Fix the AND, OR, and XOR operator.

New API for referencing a Gambas string.

Raise a more explicit "No return value" error when trying to get the return value of a task that didn't return anything.

When converting a string to a date with Val(): if the year begins with a zero character, then it is not converted to years between 1931 and 2030 if it is lower than 100.

When formatting a date, the number of y is now the minimum number of digits used for displaying the date year.

RDir() now works correctly when browsing executable directories.

Add a boolean flag in the class structure not to try to call the _free special method if there is not.

Raise an error if a object being freed has been referenced by its _free special method.

Add a new message error for free object being referenced.