* Overall syntax highlighting improvements for C++
Most of these changes are based on the information on cppreference.com;
specifically from here: https://en.cppreference.com/w/cpp/keyword
- made `identifier` actually match any identifier
- add ~ as an operator
- add `static_assert` as a keyword (statement)
- add keywords that are interchangeable with operators as operators
- add keywords `sizeof`, `alignof` and `typeid` as operators
- add the quasi-keywords `asm`, `fortran` and `final`, `override`
- add the keyword `nullptr`
- add `_Pragma` as a preprocessor keyword
- add C++20 (concepts and modules) -related keywords
- add casting keywords
- add the keyword (specifier) `noexcept`
- remove `nothrow` (because it's not any more special than `vector` is)
- add `wchar_t` and `charXX_t` types
- add cv type keywords as `type.keyword`s
- move some fitting keywords into `type.keywords`
(mostly because they appear in/near type signatures etc.)
I didn't include coroutine-related language features,
primarily because there is no good source of information
about them other than the ISO C++ standard.
* Further changes to C++ syntax highlighting
- reverted the changes to the `identifier` regex, since most
colorschemes color it the same as `type`s and/or `statement`s
- fix the 2nd `type` regex (the word boundaries were in only two pipe-options)
- move `nullptr` back into `constant.bool`,
since it looks better in-editor this way (imo)
- add `?` as an operator
- add regexes that match all the correct number literals, and nothing else
(see https://en.cppreference.com/w/cpp/language/floating_literal)
(that is, if I haven't made a mistake)
Add InfoBuf's method AddToHistory function which adds a new item
to the history for the prompt type `ptype`.
This function is not used by micro itself. It is useful for plugins
which add their own items to the history, bypassing the infobar
command line.
* Python3: Add built-in object 'cls'
* Python3: Add the bitwise negation operator ~
* Python3: Add support for hexadeximal and binary numerical literals
* Python3: Rewrite '(__foo__|__bar__)' as '__(foo|bar)__', add known '__i.*__' methods
* Python3: Add __iter__ as a magic method, sort the list of magic methods
* Python3: Numerical literals: Add support for '_', disallow leading 0 for decimals
* fixup! Python3: Numerical literals: Add support for '_', disallow leading 0 for decimals
hex oct and bin have different sets of allowed digits
* Python3: Add support for floating point numbers with optional scientific notation
* Python3: stop single-line strings at EOL
* Python3: Add support for TODO and FIXME in comments
* Python3: Add support for the ^ bitwise xor operator
This commit exposes the separate infopane bindings to configuration
from the user. This also adds support for separate bindings in the
terminal emulator view. Default bindings are provided, but can also
be rebound in bindings.json.
This commit separates actions in the command bar from actions in
a normal buffer, and implements what is needed to allow rebinding,
although an interface for command bar keybindings is not yet exposed
to the user.
This commit adds support for binding key sequences such as
"<Ctrl-x><Ctrl-c>". This commit does not solve the problem
of global bindings yet, and therefore the command bar doesn't
work properly in this commit.
Fix the 2nd part of #1773: resize via mouse drag doesn't work if the
split on the left contains other splits, i.e. is not a leaf node.
The problem is that only leaf nodes have unique id. For non-leaf nodes
ID() returns 0. So we shouldn't search the node by id.
So replace GetMouseSplitID() with GetMouseSplitNode().
Fix the 1st part of #1773: the dividing line between vertical splits
is not displayed if the split on the left contains other splits, i.e.
is not a leaf node.
* Makefile: Ensure we strip out embedded paths
To reproduce binaries undeterministic values needs to be removed. By
default Go embeds several module paths into the binaries, which prevents
people from reproducing said distributed binary.
The distributed binary from micro contains the full home path of the
current builder of the binary. -trimpath removes these paths from the
binary.
$ strings micro | grep "/home/zyedidia" | wc -l
868
This also helps other distributions providing reproducible versions of
micro down the line.
Signed-off-by: Morten Linderud <morten@linderud.pw>
* build-date: Ensure build time adheres to SOURCE_DATE_EPOCH
Embedding undeterministic values into binaries prevents reproduction of
the binaries. The reproducible builds projects defines
`SOURCE_DATE_EPOCH` to allow deterministic insertion of build times.
This patch ensures `build-date` checks the environment variable before
building with the local time.
$ SOURCE_DATE_EPOCH=123123 go run tools/build-date.go
January 02, 1970
$ go run tools/build-date.go
July 31, 2020
$ make build-quick && ./micro --version
[...]
Compiled on July 31, 2020
$ SOURCE_DATE_EPOCH=123123 make build-quick && ./micro --version
[...]
Compiled on January 02, 1970
https://reproducible-builds.org/specs/source-date-epoch/
Signed-off-by: Morten Linderud <morten@linderud.pw>