Layers can now declare in their layers.el file that they shadow one or more
layers using the following functions:
- configuration-layer/shadow-layers
- configuration-layer/shadow-layer
Those function are commutative so:
(configuration-layer/shadow-layer 'layer1 'layer2)
is the same as
(configuration-layer/shadow-layer 'layer2 'layer1)
and means that
layer1 shadows layer2
and
layer2 shadows layer1
The typical use-case is helm and ivy layers. Helm shadows the ivy layer and
Ivy shadows the helm layer.
Shadowing is sensitive to the order of declaration of layers in the dotfile,
for instance:
(setq dotspacemacs-configuration-layers '(
helm
ivy
))
means that ivy shadows helm so helm layer is effectively ignored,
whereas
(setq dotspacemacs-configuration-layers '(
ivy
helm
))
means that helm shadows ivy so ivy layer is effectively ignored.
This mechanism can be turned off using the :can-shadow keyword:
(setq dotspacemacs-configuration-layers '(
ivy
(helm :can-shadow nil)
))
means that both ivy and helm layers will be installed (not recommended in this
case)
Note that the `:can-shadow` mechanism will be fully implemented in a next
commit.
The first improvement consists of running the scale fix only for
graphical emacs. The scale fix is not needed in the terminal. Also some
poeple still have problems with it in the terminal even though they run
latest emacs master and spacemacs develop.
The second improvement is related to the way the margins are scaled. It
was incorrect to calculate the scale factor and apply it to the current
window margin width, it needed to be applied to the initial margin
width.
This is similar to the `Ctrl+Shift+T` keybinding found in major browsers, and
helps when accidentally killing a buffer (i.e. fat-fingering `SPC b d` when
meaning to press `SPC b s`).
Only buffers that resolve to existing files will be considered, and stored in a
stack which is pushed to and popped from on buffer kill.
Problem:
Two which-key functions doc-strings, state that they are obsolete:
(which-key-declare-prefixes KEY-SEQUENCE REPLACEMENT &rest MORE)
This function is obsolete since 2016-10-05;
use ‘which-key-add-key-based-replacements’ instead.
(which-key-declare-prefixes-for-mode MODE KEY-SEQUENCE REPLACEMENT &rest MORE)
This function is obsolete since 2016-10-05;
use ‘which-key-add-major-mode-key-based-replacements’ instead.
Solution:
Replace the obsolete functions.
Searching with `SPC /` through the .emacs.d folder, didn't find any other
occurrences of these functions.
- bind spacemacs-layouts/non-restricted-buffer-list to SPC b B instead
of SPC B b
- rename buffer listing functions in which-key to be more explicit
PR title:
bindings: non-restricted-buffer-list-* to SPC B b instead of SPC B b
PR message:
I don't know what was the thought behind this, but `spacemacs-layouts/non-restricted-buffers-list-*` was alone in its `SPC B` prefix and `SPC b B` was almost free, only used in one layer that I would be surprised if it was widely used (`ibuffer`).
I also renamed buffers listing functions in `which-key` to be clearer for the user. Indeed, I find that names like `helm-mini` are pretty obscure and kind of defeat the purpose of `which-key` and `spacemacs-layouts-non-restricted-buffer-list-blah` was so long that it couldn't even be displayed.
Now the user can choose between `list-buffers` or `global-list-buffers` for listing buffers.
Group together the which-key entries that call the same command:
k and - becomes k,-
u and _ becomes u,_
Declare a prefix name for SPC x i, this changes the SPC x entry:
from: "i -> +prefix"
to: "i -> +inflection".
Capitalize the transient state title, so that it matches the other TS titles.
Sort the code and documentation key bindings alphabetically.
Old version worked only for method 'ssh' and did not work at all if
user was not specified (e.g. /ssh:hostname:/path). Since the symbol '@' was
required in a filename.
Comment the code and group the keys/commands based on the
which-key section they appear in.
Reduce the width of the listed keys:
By removing spaces around the two dots `..` in the key sequences, and
by removing the modifier keys before the last number in a sequence.
Update the renamed select-window-[1-9] command name, to the new
winum-select-window-[1-9] name.
Combine keys that call the same command.
The various string-match calls in this function were obviosly written with that
in mind.
This also fixes the case where the compilation buffer contains the output of
`cargo test`, which includes "0 failed". Previously, this was treated as an
error, now it's not.
- Remove echo of regexp
- Use = instead of equalp
- Use use-region-p instead of checking line numbers
- Use when/unless instead of if
- Use point-at-{eol,bol} instead of point
Problem: There are two projectile spacemacs/set-leader-keys sections,
next to each other.
Solution: Combine and sort the keys alphabetically with lower case
before upper case. A quick search showed that order in a lot of
other set-leader-key sections.
problem: target window doesn't get focus after buffer swap:
'symbols function definition is void: select-window-by-number'
solution: missing 'winum-' before 'select-window-by-number'
It was `SPC q z` but:
1. 'z' is not a mnemonic for "frame" (although it may be more familiar to vim
users).
2. More importantly, it's *really hard* to type 'qz' on a qwerty keyboard.
Updated the `spacemacs/new-empty-buffer` function, to accept a `split`
argument, that can have 4 values: `left`, `below`, `above` or `right`.
Added new functions and key bindings (SPC b M-h, -j, -k and -l) for
each direction.
Limit the lines to only get sorted when a block or rectangle
selection is active, on 2 or more lines. Otherwise show a
message stating the requirements for sorting by column.
Problem: In the Ivy layer, `SPC p` lists: h -> helm-projectile
but when it's called, then it shows:
`command-execute: Wrong type argument: commandp, helm-projectile`
Solution: Remove "ph" 'helm-projectile from: spacemacs-base/package.el
Because it's also defined in the Helm layer.
Create new layers:
- spacemacs-navigation: contains packages whose principal goal is navigation
- spacemacs-modeline: contains packages about mode line
Merge spacemacs-ui and spacemacs-ui-visual into layer spacemacs-visual.
1. Make it possible to exclude the package (fix the go and rust layers).
2. Import variables all at once (avoid spawning multiple login shells).
3. Import variables early (during the "pre" package loading stage).
4. Centralize the platform check by using a package toggle in the
`spacemacs-base`.
5. Avoid importing already defined variables (except `PATH`/`MANPATH`).
Relates to #8537.
TODO: We can probably trim the platform list to macos only.
- Just setting evil-search-module is not enough. If Evil is loaded already, we
must call evil-select-search-module as well to actually change the
key-bindings to use the correct search module.
- If the user didn't set hybrid-mode-use-evil-search-module so it's not bound,
we treat it as if it was set to nil, to match the documentation and the
default value of hybrid-mode-use-evil-search-module.
Specifying parent modes (e.g. prog-mode) in :enabled-for-modes and
:disabled-for-modes keys in dotspacemacs-line-numbers catches derived
modes (e.g. c-mode) as well.
Fix bug where an empty :disabled-for-modes and a non-empty :enabled-for-modes
enabled line numbers everywhere, instead of only in modes specified in
:enabled-for-modes. (see https://github.com/syl20bnr/spacemacs/issues/8482)
Add auxiliary function spacemacs/derived-mode-p, similar to derived-mode-p but
takes a major-mode as an argument instead of using the current major-mode.
The issues section in the bitbucket evil repository seems to
have been removed when the evil package was migrated to github.
It means that the bitbucket url to the file: evil-states.el,
is eventually going to become outdated and possibly removed.
And the bitbucket issue url now redirects to the bitbucket sign
up page.
Therefore both urls were updated to point to the equivalent
urls in the github evil repository.
Add spacemacs/enable-transparency and spacemacs/disable-transparency.
For anyone who'd like to enable transparency at startup, just write '(spacemacs/enable-transparency)' to .spacemacs, and it'll work fine.
Fix spacemacs/increase-transparency and spacemacs/decrease-transparency
There was an error in `linum-on` when `dotspacemacs-line-numbers` was set to
`'relative`.
- new function `spacemacs//linum-backward-compabitility` to test for old
supported values.
- Use an :around advice for `linum-on` instead of redefining it.
- move linum init time config to `:init` section of `use-package`
- fix relative linum initialization by testing if `dotspacemacs-line-numbers` is
a list first.
Also remove the docstring about SPC h SPC as it is already implied for the other
options in the dotfile.
Note that this commit modifies one condition, namely disabled mode condition.
It removes the first test:
(not (spacemacs/mplist-get dotspacemacs-line-numbers :enabled-for-modes))
as it is not necessary since we have a `or` in the enable-p condition. Disabled
modes will be checked only if the current major mode is not explicitly enabled
(as intented).
Changed the buffer transient states formatting so that it matches
most of the other transient states.
Frontend
Reduced spacing:
- Between the keys and descriptions, from 2 to 1.
- Between both columns, from 4 to 2.
Backend
The first column didn't need the last two "^" (caret) characters.
Changed the last line so that "^^^^" starts below the first column.
Update the formatting of the SPC w . window manipulation
transient state panel.
Select column
Change "[0-9] window N", to "[0..9] window 0..9",
so that it matches the SPC "0..9 -> window 0..9" and
SPC b "1..9 -> buffer to window 1..9" combined entries.
Split column
Add "i" to the end of "vert", then it'll have the same number
of characters as "horiz", and the text will be aligned.
Resize column
Shorten "horizontally" and "vertically" to "horiz" and "verti",
it reduces the panels width slightly.
Other column
Shorten the horizontal line below the title, so that it matches
the longest key description.
Move [q] quit to the bottom of the column.
All columns
Equalize the horizontal spacing between the columns,
from: 2, 2, 3, 3, to 2 between all columns.
Distribute spacemacs-theme with Spacemacs so we don't need to download the
package of the theme at startup. It was delaying the display of the home buffer.
Now Spacemacs fallback to spacemacs-dark theme if the user theme cannot be
applied. Spacemacs then tries to install and reapply the user theme. If
successful, at the subsequent startups the user theme is applied right away
instead of spacemacs-dark. If the installation failed then we display a warning
informing the user and suggesting some actions.
There is now no package left to be installed manually at the start of Spacemacs.
An active evil-visual-block selection, uniquified the whole buffer, this
checks either region-active-p or evil-visual-state-p, now it sorts the
selected lines.
The comment was also updated with "a" before "region" and "the" before
"current buffer".
winum.el is an heavily extended and partly rewritten version of
window-numbering.el.
Among other things it allows window numbers to be shared across frames,
thus improving multi-screen user experience.
- add new bindings to move and swap buffers, and switch active window,
by number
- change kill buffer shortcut to d for consistency
- Change docs appropriately
Removed the variable p2, it was defined and assigned, but never used.
Removed two progn expressions that wasn't needed.
Implemented bmag's suggestions:
Changed "if" to "when", and removed a superflous p1 assignment.
spacemacs/alternate-window was suggested to switch between the last selected
window, or the window-analog of SPC TAB (spacemacs/alternate-buffer). This is
part of a larger family of functions, such as spacemacs/jump-to-last-layout on
SPC l TAB and eyebrowse-last-window-config on SPC l w TAB.
Resolves#7845
New function `dotspacmacs/emacs-custom-settings` wrapping Emacs
custom settings sexps.
`dotspacemacs/emacs-custom-settings` is called just after the user
configuration (`dotspacemacs/user-config`)
Customize cannot write its auto-generated sexps inside a function, to
accomplish this we trick Emacs by setting the custom file to a file
in `.cache` directory, the path to this file is defined by the variable
`spacemacs--custom-file`. At the startup of Emacs we read this file
to insert its content inside the function
`dotspacemacs/emacs-custom-settings` in the dotfile, this is done in the
function `spacemacs/write-custom-settings-to-dotfile`.
I don't think we need to write the custom settings to the dotfile when
exiting Emacs as well, since we do it at startup at the very beginning
(i.e. before actually loading the dotfile) we should be OK.
Fixes#5170
The current default color is "black", which creates ugly bars for many
themes on both sides of the centered buffer. This change sets the fringe
color to the buffer's background color, which blends in nicely.
Changes to rotate-windows:
- rename to spacemacs/rotate-windows-forward
- direction of rotation matches window numbers
- COUNT argument now rotates all windows by COUNT steps
- all window parameters are saved, not only buffer and window-start
swap-windows is not used for now, but could be helpful in the future.
from https://www.emacswiki.org/emacs/CopyingWholeLines
Duplicate current line, or region if active.
With argument N, make N copies.
With negative N, comment out original line and use the absolute value.
keybinding: `SPC x l d` (text - line - duplicate)
Toggling the time is a segment so it is more consistent with the rest
of the lowercase keys.
Toggling the whole mode-line feels better on a capital letter.
When Spacemacs is run as a macOS homebrew service, the window-system
at startup time is not set. This causes the very-early
call to exec-path-from-shell, which was checking for macOS via
window-system, to fail the check. This is pretty much game over
for macOS and user-customized paths, as the exec paths are not
updated and any extra user-path utilities (e.g. aspell, gls) won't
be found.
This change switches over to using spacemacs/system-is-mac and
spacemacs/system-is-linux as the primary check, and keeps the
window-system check for 'x in case other Unix variants
are getting exec-path set via that check.
Fixes#5738
* Pointed out which keys are using as in Evil
* Pointed out the binding order pattern
* Added that the g binding will be directly bound to C-G
Update README.org and add spacemacs-purpose layer to spacemacs
distribution.
Move functions of the layer to funcs.el and prefix variables and
functions introduced by the layer with `spacemacs`.