Zachary Yedidia [Sun, 29 Dec 2019 02:26:22 +0000 (21:26 -0500)]
More efficient loading for default syntax files
This change introduces header files for syntax files. The header
files only contain the filetype and detection info and can be
parsed much faster than parsing a full yaml file. To determine
which filetype a file is, only scanning the headers is necessary
and afterwards only one yaml file needs to be parsed. Use the
make_headers.go file to generate the header files. Micro expects
that all default syntax files will have header files and that
custom user syntax files may or may not have them. Resolving
includes within syntax has not yet been implemented. This
optimization improves startup time.
Campbell Jones [Fri, 27 Dec 2019 00:13:23 +0000 (19:13 -0500)]
Enable syntax highlighting for Kotlin script files
In addition, make the following changes to the kotlin syntax highlighting:
- Add new unsigned types to type.storage
- Add const as a statement keyword
- Remove typeof from type keywords
Zachary Yedidia [Wed, 25 Dec 2019 22:07:30 +0000 (17:07 -0500)]
Merge branch refactor2.0
The code from the refactor that I have been working on is
now more or less ready to be merged. These changes make some
breaking changes, notably with regards to the plugin
interface. Once a lot more documentation has been written, I
will release this code as micro 2.0. There are a lot of new
features, and in the coming days I will try to go through
the open issues to see exactly which ones are addressed by
the new features, and write lots more documentation
regarding what has been implemented.
Some highlights include:
* Simple autocompletion.
* Autocompletion (tab by default) will do a simple
"buffer completion" which will autocomplete according
to words used elsewhere in the buffer. In the future
plugin support could be added along with support for
interfacing with language-specific autocompletion
tools.
* Automatic backups.
* Backup files are stored in `~/.config/micro/backups`
for every open buffer and are saved roughly every 8
seconds if the buffer is being modified. Backups
are removed when the buffer is closed, but if micro
or the system crashes, any unsaved changes can be
recovered by re-opening the file (micro will auto-
recover) or by manually viewing the backup in the
`~/.config/micro/backups` directory.
* Configurable statusline.
* Configurable linter plugin.
* Resizeable splits.
* Complete re-organization of the code to support better go
modules and maintain a better directory structure.
* Better plugin interface with better access to the Go
standard library and internal Micro functions (lots of
documentation still needs to be written).
* Documentation still needs to be written, but in the
meantime please see the default plugins as examples
as they have been converted from their old versions
to be compatible with the new interface.
* Buffer synchronization when the same file is opened
multiple times.
* Keybindings and mouse support in the command bar.
* Support for non-utf8 encodings.
* General QoL improvements and bug fixes.
* Notably I believe the autoclose plugin crash issue is
fixed.
* No more plugin manager.
* Plugin installation will now be performed manually
by git cloning into the `~/.config/micro/plug`
directory. This may not be a highlight for some but
I believe it is much simpler, and there is no need
to have a heavyweight dependency manager. Perhaps
in the future, a good command-line tool can be made
to manage plugins if people would find it useful.
* Other features that I have forgotten.
Next I plan to write up more documentation for all the new
features, and make a "release candidate" for micro 2.0. I
will also be working to fix any bugs that come up (hopefully
not too many, but this is a big change and bound to have
some issues). After release I hope to focus more on
optimization (for example loading syntax files is currently
somewhat inefficient, and the bottleneck for startup time #1427).
Sorry for not being so active recently, but I hope merging
this big change can help me get back to more regular
development. Thanks to everyone for using micro and for
giving feedback and engaging with development online (even
if I don't always respond).
Merry Christmas!
Issues that are fixed/affected by this change:
Ref #1419 (configurable statusline)
Ref #1413 (cursor behaves better)
Ref #1401 (softwrap problems)
Ref #1383 (better save with sudo)
Ref #1424 (better save with sudo)
Ref #1382 (go modules)
Ref #1381 (install plugins from command line)
Ref #1357 (sorting -- textfilter)
Ref #1351 (custom linting)
Ref #1350 (sudo problem might be fixed)
Ref #1298 (readonly option)
Ref #1250 (autoclose bug)
Ref #1239 (go modules)
Ref #813 (autoclose bug)
Ref #812 (cursor sync across same buffers)
Ref #770 (resizeable panes)
Ref #635 (keybindings in infobar)
Ref #596 (disable builtin plugins)
Ref #550 (backups)
Ref #174 (autocompletion)