problem
Opening the full release note, leaves the cursor at the
beginning of the second line after the preview.
solution
Leave the cursor at the beginning of the first line after the preview.
problem
The number keys searches for a line starting with a number,
from the beginning to the end of the buffer,
even if they are above or below the window.
solution
Only search for the visible number lines.
problem
It might not be clear how the note can be closed.
solution
Add a button: Close note
to the bottom right of the notes:
Quick Help and Release Notes
This also defines the Spacemacs home buffer key bindings,
in the `emacs-startup-hook`.
Because the keys were being defined to early,
before the new value of: `dotspacemacs-show-startup-list-numbers`
was set in `.spacemacs`.
* Add :timeout for spacemacs|define-transient-state
This add a :timeout keyword for spacemacs|define-transient-state, it
make use of :timeout keyword defhydra according to
https://github.com/abo-abo/hydra/wiki/internals.
"The :timeout key starts a timer for the corresponding amount of seconds that disables the hydra. Calling any head will refresh the timer."
* Add idle for spacemacs|define-transient-state.
According to https://github.com/abo-abo/hydra/wiki/internals:
This key can delay the appearance of the hint.
Add :timeout and :idle in defhydra body to make it effect.
- Conform to standard ELISP file practice.
- Rearranged the top-level forms s.t. Variables and constants are declared at top.
- Added section markers and documentations.
- Use three or more `;` as a section header. They work well with built-in outline-mode. `M-j` and `M-k` is the binding to quickly navigate between them.
- Optionally use `^L` (form-feed) as a divider for the ELISP file. It's rendered as a horizontal divider. And it works with `backward-page` (`C-x [`) and `forward-page` (`C-x ]`)
* core-customization: improved SAFE variable handling
- SAFE can either be a function or t.
- When it's t, use a default validation function
`(lambda (val) (validate-value val TYPE t))`
- When it's a function, use the supplied function.
* Fixed bugs in go and groovy layer
In almost any cases, it's better to supply `t` instead of a function, to
`SAFE` argument of `spacemacs|defc`.
For example,
```elisp
(spacemacs|defc go-use-gocheck-for-testing nil
"If using gocheck for testing when running the tests -check.f will be used instead of -run to specify the test that will be ran. Gocheck is mandatory for testing suites."
'boolean nil #'booleanp)
```
If its value is nil, it evaluate to `nil`, which means that `nil` is not
a safe value for `go-use-gocheck-for-testing` local variable.
But clearly it is.
* core-customization: improved SAFE variable handling
- Added a function `spacemacs-customization//get-variable-validator`.
This function is designed to be used with `safe-local-variable`
property of spacemacs custom variables.
See details in the docstring.
```elisp
(put 'FOO 'safe-local-variable
(apply-partially 'spacemacs-customization//get-variable-validator
'FOO))
```
- This is better than a lambda since `apply-partially` returns a compiled
function. (Though the performace gain may be tiny.)
- This is better than simply calling `validate-value`, because it returns
nil when value is nil. But sometimes nil is a valid value.
Co-authored-by: Lucius Hu <lebensterben@users.noreply.github.com>
spacemacs|define-jump-handlers only defines a variable
`spacemacs-jump-handlers-MODE' to which handlers can be added and sets up key
bindings for mode. MODE must be a major mode,. It won't add function to mode
hook anymore.
`jump-to-definition` will walk through the three lists of handlers in the
following order: spacemacs-jump-handlers, spacemacs-jump-handlers-MODE, and
finally spacemacs-default-jump-handlers.
Dynamic handlers like lsp, tide, ggtags use spacemacs-jump-handlers to register
(add-to-list 'spacemacs-jump-handlers 'jump-hanlder)
Conventional static handlers should use spacemacs-jump-handlers-MODE
After new custom `dotspacemacs-*` variables being introduced in
`core/core-dotspacemacs.el`, if one has an old `.spacemacs` without these
variables set, `SPC f e R` will complain error messages like
```
Variable: "dotspacemacs-emacs-dumper-dump-file" has value: "nil" that doesn't
match its type: "string"...
```
even if these variables have already had initial value.
This is because `dotspacemacs||let-init-test` macro only locally declares these
variables without setting them with their initial value.
This pull request fix this issue by expanding (dotspacemacs/get-variable-list)
into `'((var1 value1) (var2 value2) ...)` list instead of `(var1 var2 ...)`.
problem:
`SPC f e U` checks if packages have updates.
But if the current buffer isn't the Spacemacs home buffer,
then the minibuffer just shows:
>Do you want to update 1 package(s)? (y or n)
There's no information about which packages have updates.
Canceling the prompt with: `n`
and switching to the messages buffer `SPC b m`, does list them.
>(Spacemacs) --> Found 1 package(s) to update:
>
>(Spacemacs) dap-mode
But it doesn't work to switch to the home buffer,
because that information was erased when the home buffer was refreshed.
solution:
Switch to the home buffer before checking for updates.
* [init] Disable GUI elements in early-init as well
Can provide a smoother startup by reducing graphical artifacts.
* [core] Add file for early-init functions
Needed to make the tests to work as early-init.el is not sourced
during tests.
Fixes error:
Symbol’s function definition is void: spacemacs/removes-gui-elements
problem:
Setting dotspacemacs-which-key-delay to an integer, for example: 4
Makes the following message to appear on startup:
(Spacemacs) Error in dotspacemacs/init: Variable: "dotspacemacs-which-key-delay" has value: "4" that doesn’t match its type: "(float)". Validator message: "(user-error Looking for `(float)' in `4' failed because:
not a float)"
cause:
dotspacemacs-which-key-delay expects the type: float
The float type has the description:
The value must be floating point.
solution:
Change the type to: number
The number type has the description:
The value must be a number (floating point or integer).
Source: info (`C-h i`)
In the section: Elisp > Customization Types > Simple Types
Added support for jumping to two digit numbers.
How quickly two numbers have to be typed,
can be modified with the variable:
spacemacs-buffer-multi-digit-delay
Smartparens seems to cause performance issues for
a lot of users. This PR allows to disable the package
completely.
There are some functions in elisp and common-lisp mode
which dependt on this package and will manually require
it when executed though. But this should only affect
lispers which mostly will want to have some kind of
smartparent functionality anyway.
For the discussion see here #12533.
problem:
Pressing a number key on the Spacemacs home buffer,
doesn't reliably open the expected recent file.
cause:
The number keys are bound to open the files in the
order they are listed in the `recentf-list`.
The `recentf-list` is updated when a file is saved.
The home buffers recent files list is only updated
when the home buffer is created/refreshed/resized.
solution:
Open the recent files in the order they were listed
when the home buffer was last updated.
Fixes: incorrect order number in recent files on home buffer #14471
Define named functions: spacemacs-buffer/jump-to-...
for the home buffer shortcuts. So that a descriptive name is shown,
in for example the view-lossage (C-h l) buffer.
Before:
r ;; anonymous-command
p ;; anonymous-command
After:
r ;; spacemacs-buffer/jump-to-recent-files
p ;; spacemacs-buffer/jump-to-projects
problem:
When the Emacs frame has the default window width (80 characters).
Then the current restart to update message:
Emacs has to be restarted to actually install the new version of the packages (SPC q r)
is cut off at the Emacs frames right edge:
Emacs has to be restarted to actually install the new version of the packages (S
solution:
Shortening the message:
Restart Emacs to install the updated packages. (SPC q r)
says the same thing, and keeps it within 80 characters.
Moved the function definitions for:
spacemacs//trailing-whitespace
spacemacs//set-whitespace-style-for-diff
from: spacemacs-default/packages.el
to: spacemacs-default/funcs.el
This definition requires 3 arguments. Having only two can cause Emacs a
wrong-number-of-arguments error. So this PR just adds the date when the orginal
functions were removed and the alias was created.
`dotspacemacs-startup-lists` by default shows a number of recent files and
projects as two separate lists. If I've been working with a lot of files in one
project, then all the recent files are from one project, even if I set `recents`
to a large amount like 24. This change allows me to see the recent files by
project. Suppose, for example, I have a `vegetables` project and a `fruit`
project, and set `dotspacemacs-startup-lists` to `(recents-by-file . (2 . 3))`.
In the home buffer I will see something like:
~/vegetables
lettuce.el
squash.el
tomatoes.el
~/fruit
apple.py
orange.py
banana.py
Even though only a subpath is displayed for each file, the click functionality
still works---i.e. the link still has the full path under the covers.
I originally asked a [question](https://emacs.stackexchange.com/q/62524/19069)
on Emacs StackExchange to see if there were any pointers or if this was already
a solved problem. After several days of receiving no answers, and having a
little time to poke at it, I figured I'd implement it myself.
What this does not cover: mixing recent files totally outside projects into this
list. Today they are just filtered out. That is a usecase I didn't need so I
figured that could be done in a subsequent pass if somebody wanted it.
Problem:
When the restart-emacs package is being updated.
The update packages restart message, still shows the (SPC q r) key binding even
though it doesn't work.
Cause:
The member function compared a string against a list of symbols.
A possible improvement:
Explain that the key binding won't work this time.
Before:
Emacs has to be restarted to actually install the new version of the packages (SPC q r).
After:
Emacs has to be restarted to actually install the new version of the packages
(SPC q r) won't work this time, because the restart-emacs package is being updated.
* [core][keybinng] improve minor mode binding
This commit added add a new function defun spacemacs/declare-prefix-for-minor-mode
and improved spacemacs/set-leader-keys-for-minor-mode.
`which-key` package recently introduced a new api
which-key-add-keymap-based-replacements which improves perfomance and allows
prefix and namings to be stored directly in keymap. This is a great improvement.
With this new api we now make change to spacemacs/declare-prefix-for-minor-mode
to manage prefix also. For example:
(spacemacs/set-leader-keys-for-minor-mode 'lsp-mode
"=" "format"
"=b" #'lsp-format-buffer)
Before we had to use another api to bind prefix
spacemacs/declare-prefix-for-mode which only works on major-mode. As lsp-mode is
a minor mode this api causes a lot of problems to which-key performance. An
example is https://github.com/syl20bnr/spacemacs/issues/12455 which led to my
hack in https://github.com/syl20bnr/spacemacs/pull/12474.
The improved spacemacs/set-leader-keys-for-minor-mode will take care of both
prefix and key naming for the minor mode. This will allows us to have a better
set up for dynamic minor modes such as lsp-mode, tide-mode etc.
Also another api is created to make prefix for minor mode:
spacemacs/declare-prefix-for-minor-mode.
Usage:
(spacemacs/declare-prefix-for-minor-mode 'tide-mode "E" "errors")"
* [tide] improve prefix
* [lsp] improve prefix
Many new users (quite logically) assume that the additional-packages list
behaves like installing a layer, so they assume the file is also loaded
automatically. This commit adds info about the requirement to also load the
package with load/require/use-package in the user-config section of the dotfile.
Added "configuration-layer//system-package?" based on package-delete
(pretty much a direct partial copy-paste) so that
"configuration-layer//package-delete" can check if package is a
system package
No crash on spacemacs boot (with unused system-package present).
Though right now "configuration-layer//package-delete" only ignores system
packages instead of reporting them. Not entierly what @nbraud proposed,
but insufficient err-logging is a significantly smaller issue.
Fixes#11160
The new variable was not following the naming conventions.
The file was not initialised in core-dotspacemacs.el.
The file was not part of the .spacemacs.template.
Spacemacs allows to define layers declaratively like so:
dotspacemacs-configuration-layers
`(,(when (eq system-type 'darwin) 'osx))
The problem - in Linux that would add a nil element into the list, which then
makes it unable to run dotspacemacs/sync-configuration-layers <SPC f e R>, the
tests won't pass.
time-date.el requires cl-lib under Emacs 27 and above. Then the around advice
spacemacs//timed-require and spacemacs//load-timer of require will cause
recursive load under emacs 27 and above. The load sequences is: requiring cl-lib
uses autoload function time-since which loads time-date.el and then time-date.el
requires cl-lib.
The solution to break this recursive load sequence is to load time-date.el
before adding the around advice spacemacs//timed-require and
spacemacs//load-timer to require.
The original idea was to have a warning when
use-package-inject-hooks is set to nil however
having a warning in that macro caused too much
negative side effects and also does not cover
all cases.
Therefore it is to be removed.
In my first commit I did not add the warning message properly.
Basically the macro should emit code to create a warning if
the generated code is run and the predicate is not fulfilled.
However in my last commit it did run the code during macro
expansion which would do the testing there which is not
what I wanted.
spacemacs|use-package-add-hook is generating code which
is dependent on use-package-inject-hooks being non-nil.
If this happens now a big warning is written to the log
informing users of a potential issue or problem caused
by their user-config.
In a terminal, when a modes mode line name is diminished,
to two characters, and the first one is a unicode character,
then the second character overlaps the right side of the first character.
Add doom-gruvbox-light theme to prevent Spacemacs from trying to download a
package with the same name from elpa (and failing because there is no such
package).
doom-gruvbox-theme can now be included in dotspacemacs-themes configuration
without generating an error or trying to download a non-existent package.
To optimise performance of lsp mode in emacs 27 and above
I have introduced a new dotfile variable to define the size
of data read from external processes. The default I have
set to the recommended setting from lsp-mode.
In addition I have introduced a new layer variable for
auto-complete-layer to define the minimum prefix length.
I have also added instructions to auto-complete's readme
how to set these variables to the recommended settings
for lsp-mode.
Changes inspired from #13507
Themes can now contain keywords in addition to just the theme name like
dotspacemacs-themes '((name :location (recipe :fetcher github
:repo "user/repo"))
solarized-light
solarized-dark)
However, for theme cycling, we first try to detect whether the current
theme (spacemacs--cur-theme) is in the list of cycleable themes and go on from
there. Since spacemacs--cur-theme is just a name, this fails when
spacemacs--cur-theme is the name of a theme that's specified with additional
keywords in dotspacemacs-themes.
To fix this, check if spacemacs--cur-theme is in the list of theme names.
This is a squash commit including below commits
Add dotspacemacs--pretty-ignore-subdirs
Within the specified subdirs of `dotspacemacs-start-dir`,
spacemacs/prettify-org-buffer (and hence space-doc-mode) will not be called.
Without this variable, using spacemacs/open-junk-file to create an Org file will
result in prettification, which is not necessarily the desired behavior.
Call make-directory in spacemacs/open-junk-file
This imitates the behavior of open-junk-file.
Prevent spacemacs/open-junk-file from getting confused by Dired
If we're in a dired buffer, counsel-find-file will ignore
current-directory (i.e. junk-dir) and use (dired-current-directory) instead. We
fool Counsel by shadowing major-mode to nil.
Update CHANGELOG.develop re spacemacs/open-junk-file
Theme transient state key-binding `t` is broken if `ivy` completion framework is
used. The binding unconditionally invokes `helm-themes`.
This change adds a new function which takes care of invoking correct
theme-loader function based on completion framework currently in use.
The old binding used `helm-themes` but the new function uses already defined
`spacemacs/helm-themes` which removes the number of candidates limit.
There have been complains about issues with `clean-aindent-mode` from
multiple users. For some of these deactivating the mode in their user-init
did not work as intended. Therefore I have added a setting for it in the
dotfile.
Modus themes are highly accessible themes for GNU Emacs, conforming with the
highest accessibility standard for colour contrast between background and
foreground values (WCAG AAA standard).
Screenshots: https://gitlab.com/protesilaos/modus-themes/-/wikis/Screenshots
If a layer is interactively installed by visiting a file the progress
file is updated without being properly initialized before causing a
division by zero.
Now `spacemacs/update-progress-bar` will ignore the call if
`spacemacs-loading-dots-chunk-threshold` is <= 0.
This commit contains the following original ones:
[dump] don't assume spacemacs start directory when dumping
[dump] dump to a temporary file and atomically rename it
[dump] cleanup after dumping
destructuring-bind is a macro in the deprecated package: cl
SPC-TAB calls: spacemacs/alternate-buffer
In the spacemacs-base distribution, it shows the message:
spacemacs/alternate-buffer: Symbol’s function definition is void: destructuring-bind
Also renamed three instances of destructuring-bind in the rirc layer.
The change was introduced by #13059. mocker.el is a large piece of legacy code
that depends on deprecated functionality in EIEIO and cannot be trivially
converted to use `cl-lib` by search and replace.
Problem:
The variable spacemacs-layouts-restrict-spc-tab is defined in:
~/.emacs.d/layers/+spacemacs/spacemacs-layouts/config.el
But the spacemacs-layouts layer isn't loaded by default in spacemacs-base.
Solution:
Check if the variable is bound.
- Removed the first line deletion.
This required the banners to have an empty first line.
- Removed the empty first line from the banners.
- Made sure that there is a single empty line between:
- The Version and Banner.
- Banner and Buttons ([?] [Homepage] ...).
- Version and Buttons (when the banner is hidden).
- Reordered the backend version insertion function call
to match the frontend Spacemacs buffer order.
- version
- banner
- buttons
Before it added:
- the banner
- then the buffers first line was removed
- then the version was added to the first line
- then the buttons were added at the bottom of the buffer
(there are more things added after the buttons,
but they haven't been changed by this commit).
- Removed the version insertion call in:
core/core-spacemacs-buffer.el
The changes above caused the version to appear twice
in the Spacemacs home buffer on startup.
I'm not sure if it has/had other uses.
This seems to be where it was first added to:
core-configuration-layer.el:
core: restore default mode line in home buffer
77161bd591
It was slightly modified in this commit:
core: defer distro insertion in home buffer
cd50d9c069
Here it was joined with the banner:
Fix version injection in home buffer
Don't inject version if banner is nil
a764eb4eb9
core: condensed versions into one string in left-hand side
spacemacs-version@emacs-version (distribution)
627e934453
- I had not seen that the version was joined with the
banner on purpose until now.
It seemed useful to still be able to see the versions
if one just wanted to hide the banner.
Therefore I opened this PR (it's been cherry-picked):
Uncouple version from banner in spacemacs buffer #11901https://github.com/syl20bnr/spacemacs/pull/11901
If there's a good reason to combine them again,
then the changes can be reverted.
The newly introduced function to compile an elpa package
was very much redundant with the existing recompile-elpa function.
I have adapted recompile-elpa so that it can be used for the helm action too.
In addition I have bound recompile-elpa to `SPC c C-c` to allow users to
easily recompile their entire elpa directory if the need arises.
I have also removed the error handling in the helm action in favor of
standard error reporting via the *Compile-Log* buffer.
How to use: `SCP h p` select package then `F3` or `C-z` and choose `Recompile`
Motivation: Some packages when compiling need other packages to be loaded first.
The pacakage maintainers should make sure of this requirement but sommetimes
they don't. It also doesn't help when Spacemacs is lazy loading and compiles
updated pacakges on startup. So the manual fix for this problem is recompile the
package once Spacemacs has fully loaded. This requires user go to the package
install location to delete elc files and then do a `spacemacs/recompile-elpa`.
This commit will do that chore for them.
This will make fixing the problem with `org-plus-contrib` or `dumb-jump` update
every now and then easier.
Fix several problems with environment variable caching.
First, if a shell printed extra output besides the command output,
spacemacs//init-spacemacs-env included the extra output in .spacemacs.env.
For example, a login shell could print a motd, which would be erroneously
included in .spacemacs.env. To avoid this, spacemacs//init-spacemacs-env
now redirects the command output to a temporary file and then reads the
file.
Second, spacemacs//init-spacemacs-env sorted lines using the entire
"name=value" string for each line whereas the correct behavior is to sort
only on the "name" part. To fix this, spacemacs//init-spacemacs-env now
uses sort-regexp-fields with an appropriate regexp to match the "name" part
and ignore the "value" part.
Third, although load-env-vars-set-env added all PATH settings in
.spacemacs.env to exec-path, it set PATH to the first PATH setting in
.spacemacs.env. Now load-env-vars-set-env sets PATH from exec-path so that
it will reflect that combined value.
Fourth, load-env-vars-set-env set exec-path and PATH without consideration
to the operating system's directory separator. Now load-env-vars-set-env
converts backslashes to forward slashes when adding path entries to
exec-path and converts forward slashes to backslashes when setting PATH on
platforms that use backslashes.
Fifth, load-env-vars-set-env now normalizes exec-path by deleting trailing
slashes from path entries, converting drive letters in path entries to
lower-case, and deleting duplicate path entries.
Sixth, Spacemacs no longer uses exec-path-from-shell, but a changelog entry
said that it did. This commit corrects the changelog entry, deletes
another outdated entry, and merges two entries that covered the same
functionality.
Finally, this commit corrects several typos and tries to improve wording in
several docstrings, messages, and comments.
* CHANGELOG.develop: Delete mention of exec-path-from-shell, which
Spacemacs no longer uses by default. Delete mention of
dotspacemacs-import-env-vars-from-shell and
dotspacemacs-import-env-vars-shell-file-name, which no longer exist.
Merge entries about synchronizing environment variables.
* core/core-env.el (spacemacs-ignored-environment-variables): Fix typos and
mention that the strings are regexps that are matched against the names of
environment variables.
(spacemacs//init-spacemacs-env): Use a temporary file rather than standard
output in order to avoid getting motd and other noise. Sort lines using
only environment variables' names, not their values. Better describe the
behavior with respect to spacemacs-ignored-environment-variables, duplicate
settings, and PATH. Try to make wording clearer.
(spacemacs/edit-env): Fix typos in the docstring.
* core/libs/load-env-vars.el (load-env-vars-set-env): Fix typos in the
docstring. Delete trailing slashes from path entries in exec-path, convert
drive letters to lower-case, delete duplicate path entries, and convert
backslashes to forward slashes when setting exec-path. Set PATH from
exec-path, converting forward slashes to backslashes on platforms that use
backslashes.