Add these keywords to macro spacemacs|add-company-backends
:append-hooks controls wether we add the hooks to major mode hook variable
:call-hooks conrols wether we execute the created hooks function right away
Basically for multiple backends setup we want to pass :append-hooks to nil and
:call-hooks to t.
Reverting a buffer could put multiple entries of the same backend in the buffer
local `company-backends` variable.
This is due to the fact that we mutate `company-backends-xxxx-mode` variable
with:
(setq ,backends-var-name
(mapcar 'spacemacs//show-snippets-in-company
,backends-var-name)))
Solution is to add a new variable that won't be mutated when we add the support
for snippets.
When multiple modes where provided to macro spacemacs|add-company-backends along
with variables, only the first mode was taken into account as the `variables`
variable was nil after the first interation on `modes`.
This reverts commit 29c78ce841 and all other fixes
that have been made afterwards.
The motivation is that use-package is seen by many as a replacement for
`require`. Is use-package always defer the loading of packages then is breaks
this use case, this does not respect POLA so even if it was making Spacemacs
loading faster (up to 3s faster on some startup on my machine) we just cannot
use it, it would be irresponsible. Spacemacs should be easy to use, loading
performance will come with time but it is not a priority.
Also remove unneeded addtion of yasnippet-snippets directory as it is done
automatically in the package.
push is to avoid in :init blocks because it will add duplicated entries when
the user reload the configuration with SPC f e R.
dotspacemacs-directory-snippets-dir contains a path to a directory with yas
snippets in ~/.spacemacs.d (or arbitrary picked dotspacemacs direcotry).
However, while it's not always present (user has to create it manually)
it is always checked while yas is loaded which generates errors.
This diffs forces checking whether the assumed path exists before adding
it to the yas-snippet-dirs.
This replaces the older pattern
:toggle (configuration-layer/package-usedp ..)
This implementation ensures that :disabled-for honors dependent packages, i.e.
if package a depends on package b, which is owned by layer c, and layer c is
disabled for layer d, then neither package a nor b will be configured for layer
d. Previously, this was only true for package a, but not b.
This commit also fixes:
- configuration-layer/describe-package now shows which post-init and pre-init
functions are disabled, if any
- Does not recreate all layer objects unconditionally when calling
configuration-layer/discover-layers. Previously, this led to all layers being
recreated after e.g. `SPC h SPC`, without any of the dotfile information.
Since this information is now necessary for
configuration-layer/describe-package, it’s important that we don’t clear the
indexed layers when invoking this function.
By convention, code markup (`~`) is reserved for keybindings in Org-based
documentation in Spacemacs. Verbatim markup (`=`) is reserved for code and
other code-like things. So change several readmes to reflect this convention.
Use verbatim markup for things like (non-exhaustive list):
- Emacs Lisp functions, modes, buffers, etc.
- Environment variables
- Directory paths
- Code in general
It is an Emacs-wide convention to use `RET` when referring to the act of
pressing the return key. Spacemacs seems to follow that convention as well. So
fix some Org files that were deviating from this convention.
In particular, replace usages of `<return>` and `return` with `RET`.
Also update the description of an `M-RET` keybinding[1] based on the docstring
of `ido-select-text`.
[1]: Suggested-by: bmag <bmag@users.noreply.github.com>
Otherwise, the Haskell layer throws an eager expansion error because
`layers/+lang/haskell/funcs.el`, which calls this macro, is loaded before
`layers/+completion/auto-completion/config.el`, which defines
`spacemacs-default-company-backends`.
Enabling a company backend for a specific mode was a tedious tasks with code
scattered at different locations, one for local variable definitions, one for
company hook function definitions and another where the backends were pushed to
the local variables (which was problematic, since we ended up pushing the same
backends over and over again with `SPC f e R`, pushes have been replaced by
add-to-list calls in the new macro).
All these steps are now put together at one place with the new macro
spacemacs|add-company-backends, check its docstring for more info on its
arguments.
This macro also allows to define arbitrary buffer local variables to tune
company for specific modes (similar to layer variables via a keyword :variables)
The code related to company backends management has been moved to the
auto-completion layer in the funcs.el file. A nice side effect of this move is
that it enforces correct encapsulation of company backends related code. We can
now easily detect if there is some configuration leakage when the
auto-completion layer is not used. But we loose macro expansion at file loading
time (not sue it is a big concern though).
The function spacemacs|enable-auto-complete was never used so it has been
deleted which led to the deletion of the now empty file core-auto-completion.el.
The example in LAYERS.org regarding auto-completion is now out of date and has
been deleted. An example to setup auto-completion is provided in the README.org
file of the auto-completion layer.
New value `manual` for auto-completion-enable-help-tooltip enables the
user to display help tooltip on-demand. Other values remain the same:
nil for no tooltip at all, t (or any non-nil non-manual value) for
automatic tooltip.
Minor fix: call `company-quickhelp-mode` just once, because it's a
global minor-mode.
Current implementation, #1644, doesn't handle the nested snippet
expansion properly, so you end up with smarparens disabled. Very
annoying.
I improved the implementation to remember the current state of
smartaperns before a top-level snippet expansion and preserve on any
nested snippet expansions.
Also, some housekeeping of the related code:
* Move hook handlers to the `funcs.el`.
* Add comments about yasnippet hooks subtleties relevant to the issue.
Fixes#1512
TL;DR Should get 20~25% speed improvement on startup, should get a big
improvement when using ivy or helm SPC h SPC. Users with layers.el files
in their layers must use `configuration-layer/declare-used-layer`
instead of `configuration-layer/declare-layer`
The implementation of the layer system made heavy use of `object-assoc`
and `object-assoc-list` functions which are not efficient. This PR
mainly replaces those object lists with hash maps in order to index the
objects by their name and achieve an O(1) access time.
The old object lists `configuration-layer--layers` and
`configuration-layer--packages` have been each by two variables each:
- `configuration-layer--indexed-layers` which is a hash-map of all the
layer objects and `configuration-layer--used-layers` which is a list of
all _used_ layers symbols,
- symmetrically `configuration-layer--indexed-packages` which is a
hash-map of all the package objects and
`configuration-layer--used-packages` which is a list of all _used_
packages symbols.
The hash map `configuration-layer--layer-paths` is gone, now we create
directly layer objects when discovering the layers and set the :dir
property. Note that previously the layer paths were the parent directory
of the layer, now :dir is the layer path.
The function `configuration-layer//make-layer` is now similar to its
counterpart `configuration-layer//make-package` in the sense that it
takes an optional `obj` to be able to override its properties.
The functions `configuration-layer/declare-layer` and
`configuration-layer/declare-layers` now takes an optional parameter
`usedp` in order to declare used or not used layers. For convenience
new functions have been added: `configuration-layer/declare-used-layer`
and `configuration-layer/declare-used-layers`, users _must_ update all
occurrences of `configuration-layer/declare-layer` by
`configuration-layer/declare-used-layers` in their `layers.el` files.
`helm-spacemacs-help` and `ivy-spacemacs-help` are updated to match the
changes in `core-configuration-layer.el`.
Rename some variables to make them more explicit:
`configuration-layer-no-layer` -> `configuration-layer-exclude-all-layers`
`configuration-layer-distribution` -> `configuration-layer-force-distribution`