- Add option to disable by default
- Use local-vars hook to allow per-project enable/disable
- Don’t enable helm-gtags-mode (no need)
- Move emacs bindings from helm-gtags-mode-map to ggtags-mode-map
This commit defines:
- spacemacs-default-jump-handlers: a list of functions that can jump to
definition in ALL modes.
- spacemacs-jump-handlers-MODE: a list of functions that can jump to
definition in MODE.
- spacemacs-jump-handlers: a buffer-local list of functions that can
jump to definition. This is made up of the values of the two previous
variables whenever a given major mode is activated.
- spacemacs/jump-to-definition: a function that tries each function in
spacemacs-jump-handlers in order, and stops when one of them takes us
somewhere new.
- spacemacs|define-jump-handlers: a macro that
* defines spacemacs-jump-handlers-MODE, possibly filled with initial
functions
* defines a function that is added to the hook of the given MODE
* binds “SPC m g g” of that MODE to spacemacs/jump-to-definition
This is an attempt to harmonize all the different approaches to jumping.
Specifically,
- Existing intelligent jump packages that work for only a single mode
should go to the beginning of spacemacs-jump-handlers-MODE. E.g.
anaconda for python, ensime for scala, etc.
- Packages like gtags that work for several modes (but potentially not
all) and which is dumber than the intelligent jumpers should go the
the END of spacemacs-jump-handlers-MODE.
- Packages like dumb-jump that work for all modes should go to
spacemacs-default-jump-handlers.
In all cases the order of the jump handlers in each list should be from
most to least intelligent.
Fixes#6619
This fixes two issues regarding layouts.
1. Since Bad-ptr/persp-mode.el@e950bf15, persp-mode requires setting
persp-hook-up-emacs-buffer-completion in order to install the hooks for
ido & friends. This variable is nil by default, making SPB b b not
restrict to layout-local buffers.
2. The function spacemacs-layouts/non-restricted-buffer-list removes a
hook and re-adds it later. This makes the assumption that the hook was
already present. If it was not (due to 1) then SPC B b changes global
state by adding that hook. Instead, just let-bind the hook variable
for the scope we need it changed.
This explains and partially fixes#5788 and #6266. It does not fix the
dependency on ido-mode. If ido-mode is excluded, persp-mode will not
install the hook for ido, and SPB b b will still be unrestricted.
Changes to the comment in the `spacemacs/rotate-windows` function
Sentences reordered:
From:
Default behavior.
Additional behavior. Prefix argument behavior.
To:
Default behavior,
Prefix argument behavior,
Additional behavior.
Spelling:
First sentence:
"your" replaced with "each",
"forwards" added to the end.
Second sentence (after reordering the last two sentences):
"Giving" removed,
"takes" replaced with "rotates",
"kindows" corrected to "windows",
"rotate" (next to last word) removed
(Optional) Third sentence (after reordering):
"(locked)" added after "Dedicated", it might clarify that a dedicated window means that it is locked.
After these changes:
Before:
"Rotate your windows.
Dedicated windows are left untouched. Giving a negative prefix
argument takes the kindows rotate backwards."
After:
"Rotate each window forwards.
A negative prefix argument rotates each window backwards.
Dedicated (locked) windows are left untouched."
The comment in the function: `spacemacs/rotate-windows-backward`
"your" replaced with "each",
"s" added to "backward",
added the same additional behavior comment as in the "main" rotation function,
"Dedicated (locked) windows are left untouched."
Before:
"Rotate your windows backward."
After:
"Rotate each window backwards.
Dedicated (locked) windows are left untouched."
Introduce a new customization variable
`spacemacs-spaceline-additional-segments', which is a list of the
additional segments that should be inserted in the modeline when it is
initialized.
The member function works slightly different on the master branch of
emacs than in emacs 24.5 or emacs 25 release candidates. This might be a
bug in emacs but for now we can add a check if python-test-runner is a
list to work around that.
Fix#6246.
See end of this message for important breaking changes.
Previous behavior was to configure any installed package which caused
a lot of bad side effects and could make spacemacs unusable. This
behavior made little sense and does not fit with spacemacs.
This commit fixes this behavior by separating installed packages from
configured packages. In short dostspacemacs-download-packages variable
now only affect package installation. Packages are now configured if and
only if they are effectively *used* (i.e. listed in variable
dotspacemacs-configuration-layers or dotspacemacs-additional-packages).
IMPORTANT CHANGE: functions `configuration-layer/declare-used-layer` and
`configuration-layer/declare-used-layers` have been removed. These
functions have been introduced in develop branch only so the impact
should be minimal.
I think MELPA has an `old-names` back
[compatibility](https://github.com/melpa/melpa/issues/4159) measure for
cases like this, but for now it isn't working. And it's breaking all new
installs that use the java layer.
New interactive function
`spacsmacs/open-file-or-directory-in-external-app`, depending on the
value of prefix argument, it opens the current file or directory in
external app.
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
IPython 5 does no longer use readline and so the emacs integration is
broken. See also
http://ipython.readthedocs.io/en/stable/whatsnew/version5.html#id1Fix#6622 and related to #6580
This also works if different environments have different IPython
versions since the shell parameters are setup on every environment
switch.
Misspellings:
"beginnign" changed to "beginning",
"Insert one of several lines" changed to "Insert one or several lines" in two functions,
"identation" changed to "indentation",
Missing comment copied from the function that inserts a line
in the opposite direction:
(defun spacemacs/insert-line-below-no-indent (count)
"Insert a new line below with no indentation."
and renamed the direction, resulting in:
"Insert a new line above with no indentation."
Duplicate comments removed, the comments inside the functions,
are better explanations of what the function does.
Functions reordered:
The functions:
(defun spacemacs/evil-insert-line-below (count)
and
(defun spacemacs/evil-insert-line-above (count)
were written in a illogical order,
the "above" function should be written before the "below" function,
with this change, the function order will match other functions
with "above" and "below" in their names,
for example these:
(defun spacemacs/insert-line-above-no-indent (count)
https://github.com/syl20bnr/spacemacs/blob/develop/layers/%2Bdistributions/spacemacs-base/funcs.el#L535
(defun spacemacs/insert-line-below-no-indent (count)
https://github.com/syl20bnr/spacemacs/blob/develop/layers/%2Bdistributions/spacemacs-base/funcs.el#L549
evil-commands.el
line 2205: (defun evil-open-above (count)
line 2219: (defun evil-open-below (count)
line 2310: (defun evil-copy-from-above (arg)
line 2326: (defun evil-copy-from-below (arg)
evil-common.el
line 1892: (defun evil-insert-newline-above ()
line 1901: (defun evil-insert-newline-below ()
* layers/+frameworks/ruby-on-rails/packages.el (ruby-on-rails/init-projectile-rails):
added which-key prefixes for rails
* layers/+frameworks/ruby-on-rails/packages.el (ruby-on-rails/post-init-which-key):
diminish `projectile-rails` prefix in which-key menu to make commands
visible (since we're in rails menu, it makes sense to diminish common
prefix)
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`
Prevent next-buffer, other-buffer, etc. from choosing useless buffers.
No need for spacemacs/next-useful-buffer,
spacemacs/previous-useful-buffer anymore.
Also fix spacemacs/alternate-buffer to respect buffer-predicate.
When spacemacs-layouts is used, buffer-predicate filters useful buffer
that belong to the current layout.
Choose to inherit from face lazy-highlight instead of region.
Ideally a theme should not set lazy-highlight to the same face as
region.
Also move some function to funcs.el and remove some empty lines.
These changes will allow users to evaluate hy code in a repl using an
inferior-lisp process. It requires that users have hy installed via pip
in their local python enviornment.
Add smartparens-mode and documentation
I moved the add-hook for smartparens call to
python/post-init-smartparens. Keybindings were also updated to match
the ones for the Inferior REPL process for Python. Also added some
documentation for required hy pacakge, and the keybindings to
README.org.
When Spacemacs is used in daemon mode, the `PATH` is not always filled
up with user-defined run paths when Spacemacs load the packages. The
`toggle` of the `vmd` package is checking for the `vmd` executable which
may be in one of the user path, what prevent the package to be loaded,
even if the executable is available at execution time.
If people want to use `vmd`, setting `markdown-live-preview-engine`
should be enough, there is no need for checking for the executable to be
present, this is the responsability of the user to ensure this.
The `SPC g` command prefix was to much overloaded for actions which
are already available in discoverable manner in magit. So I decided to
remove all the actions reachable from magit-dispatch-popup from `SPC g`.
magit-dispatch-popup is available under `SPC g m`. This increases the
key binding sequences but OTHO it makes everythings consistent (same
key sequence behind `SPC g s` and `SPC g m`) and we prefer consistency.
This refactoring free up a lot of precious key bindings we can use for
commands that are not available in Magit.
`github-clone-add-existing-remote`, `github-clone-fork-remote`,
`github-clone-add-source-remote` come from the newest version of
github-clone and allow the easy addition of remotes to an existing
repository.
If only ipython is installed, command $ ipython notebook fails with ImportError: No module named 'notebook'. Correct to specify dependency to include the notebook server.
For example, creating new custom layout `["e" . "Name"]` clashes with
`["e" . "Spacemacs"]`. After override `SPC l o` should not show both of
them, but only the override.
Previously,
* typing `gf` in domain names (for example google.com) in normal buffers
* typing `<tab>` in domain names in the minibuffer
would start pinging that domain name. This is not really useful, so
disable it.
Fixes#2654.
Add "smart move end of line" behaviour and add two layer variables
allow for tweaking C-a and C-e behaviours:
- better-defaults-move-to-beginning-of-code-first and
- better-defaults-move-to-end-of-code-first
It is better to directly hook function using the conventional hook
functions.
Replace usage of (concat ...) by a (format ...) from which is more
readable.
The motivation is to clean redundent actions and bring more consistency
between `SPC b` and `SPC w` by:
- using capital letters for ace-window actions
- reusing the same letters between window and buffer when possible
- adding support for universal prefix argument to delete both window
and buffer
Details of changes:
Buffer
- `SPC b k` has been removed since the functionality is
available directly in Helm by selecting the kill buffer action
- `SPC b m` (buffer move) has been removed because the functionality
is available via `SPC w` with `SPC w h/j/k/l`, `SPC w H/J/K/L` and
`SPC w M` (see window section for the new `SPC w M`).
- `SPC b K` (kill other buffers) is now `SPC b m` to map with `SPC w m`
(kill other window or maximize). Using the universal prefix argument
`SPC u SPC b m` will also kill the windows.
- `SPC b C-k` (kill buffer matching regexp) is now simply on `SPC b k`.
- `SPC b D` now kills a buffer using ace-window.
- `SPC b d` and `SPC b D` now accept an universal prefix argument to
also delete the window. So `SPC u SPC b d` and `SPC u SPC b D` delete
the buffer and the window.
Window
- `SPC w M` now swap the window using ace-window.
- old `SPC w M` (center window) is now on `SPC w c` and `SPC w C` uses
ace-window.
- `SPC w SPC` (select window) is now on `SPC w W` since it uses
ace-window.
- `SPC w d` and `SPC w D` now accepts an universal prefix argument to
delete the window and the buffer.
- add haskell-completion-backend variable that should be used to select
desired completion backend
- add support for intero (based on @cydparser layer)
- remove ghci-ng support
- update readme file:
- document haskell-completion-backend variable
- remove installation notes for ghc-mod as they are not relevant
anymore
- remove ghci-ng section
- overall readme file fixes and improvements
With this new variable, user can load spacemacs anywhere, e.g.
"~/.emacs.d/spacemacs/". Only user's cache directory is still hard-coded
as "~/.emacs.d/.cache/". If user want to use spacemacs this way, drop
one line as the below in "~/.emacs.d/init.el":
(setq spacemacs-start-directory "~/.emacs.d/spacemacs/")
(load-file (concat spacemacs-start-directory "init.el"))
Helm-flx, which is included as a core package, requires a minimum Emacs
version of 24.4. As it stands attempting to install Spacemacs on Emacs
24.3 or below will break on helm-flx.
Implement a keymap for Spacemacs’ counsel search that supports saving
the results to a buffer (bound on F3 as in helm). Ensure that the new
buffer supports the GNE API.
This works with systems defined by the error delegate function (and it
shows which system is used, and which buffer supplies the “errors”).
When the Emacs next-error system is used and the next-error buffer is a
Spacemacs GNE buffer, it also shows current number / total number.
Implement a delegate function that decides which system to use. Also
check for the visibility of any next-error valid buffer, not just
compilation buffers.
Or `,.` with the shortcut, this is a more standard approach.
Use the :evil-leader-for-mode keyword to bind the transient state
Add space in the :doc of the transient state because auto-indent of
elisp code is broken otherwise.
This is a very opinionated option and works very poorly on even
moderately large projects as it invokes `hasktags` synchronously,
freezing the editor for several seconds on every save. Users who want
this behavior should enable it manually.
Fixes#6292.
According to the conversation in [0] ':' is removed from
electric-indent-chars in python-mode because typing ':' in
> for i in range(10):
> print(i)
> for i in range(10)_
with the point at _ indents the third line. This is not happening in
Emacs 24.5 anymore.
[0] aed0fc8ef8
As it was the case during the good old days when spacemacs was still a
baby, SPC h SPC now list correctly all the pre/init/post functions and
the associsted layer. It also now list properly the current owner of
a package so it is easy to find the owner of a package by narrowing
with `packagename owner`.
This new old functionality is possible by leveraging the last
improvements to the layer system (see previous commits).
TODO: update the sources for Ivy
Correctly augment the docstring based on the presence of b,f and /
bindings using dynamic hint.
b,f and / are not available if none of helm or ivy layers are used.
- Prefer add-to-list function to alter golden-ratio variables so the lists
are less likely to grows as users reload their spacemacs config.
- Move some config to layers when appropriate
- Sort alphabetically the values
- Remove some duplicates in exclude-modes
Invoking "make" or "project compilation" (<kbd>SPC c m</kbd>, <kbd>SPC c
c</kbd>) is currently not supported in ivy mode. The PR re-enables them
by adding helm-make to the ivy packages with ivy completion method.
This commit adds the 'inf-ruby-auto-enter method to
'compilation-filter-hook, automatically entering inf-ruby-mode when it
hits a breakpoint (see the
[inf-ruby-manual](https://github.com/nonsequitur/inf-ruby/#manual) for
more details).
The hook is added locally to the rspec-compilation-mode-hook to avoid
global slowdown, as the compilation-filter-hook is called whenever a
new line is entered.
specific directory.
This commit creates a 'ruby/rspec-verify-directory command, which
prompts for a directory and runs rspec on it. This command is bound to
ruby-modes' keymaps under the "td" keybinding.
(In vim style) this leaves the `n` to its usual binding to repeat the
last search which is much more practical when searching for package to
install.
elm-package-next / elm-packge-previous don't seem to do much more than
move to next/previous line so not much functionality is lost.
This allows python-test-runner to also be a list of either '(nose
pytest) or '(pytest nose) which then calls the correct test runner in
the dispatch functions.
By default the only available checker in `react-mode` is
javascript-eslint. `javascript-standard` is based on `javascript-eslint`
and has some modification on rules. Since it's not defined as a checker
for this mode, it's also impossible to select it in a buffer.
As reported in #5694 dash layer cannot be configured according to the
documentation. This commit fixes that, and allows you to actually define docset
path with `helm-dash-docset-newpath`. It also defines more sensible default for
docset `~/.docsets`, which is the default path for helm-dash.
Fixes#5694
You have to replace in your dotfile the layer variable
colors-enable-rainbow-identifiers t
by
colors-colorize-identifiers 'all
color-colorize-identifiers can take 3 values:
- variables -> colorize only variables via color-identifiers mode
- all -> colorize all identifiers
- nil -> no colorisation
New key bindings:
SPC t C a -> colorize all
SPC t C C-a -> colorize all globally
SPC t C v -> colorize variables
SPC t C C-v -> colorize variables globally
Per syl20bnr's comment on PR 6192, the package should always be
installed with the colors layer, but only hooked into prog-mode when the
variable is active. Renamed the variable
colors-enable-rainbow-identifiers-by-default to clarify this, and
modified the documentation.
When Spacemacs encounters a large file it displays a
prompt to open the file literally. However, if the file
is opened as a result of another action (e.g. Visiting a
TAGS table) it might not be obvious which file is triggering
the prompt. This change adds the file name to the prompt.
Add the new Darkokai theme to themes-megapack so it can be used.
Link to the theme: https://github.com/sjrmanning/darkokai.
The theme was added to MELPA today.
org-reveal is an extension to org mode that allows exporting of org files as
reveal.js presentations. Since not everyone needs this functionality, the
loading of the package is controlled via the `org-enable-reveal-js` switch,
which, if set to `t` would load the package.
* layers/+spacemacs/spacemacs-editing/packages.el (spacemacs-editing/init-origami):
add origami package and initialize it
* core/core-dotspacemacs.el (dotspacemacs-override-evil-folding): new
variable to allow choosing between different code folding methods.
Currently supported `evil' and `origami'
- Use completing-read when called interactively
- Check for string locations in addition to built-in etc.
- Don’t double-princ on/off for toggles
- Bind to SPC hdP
Keep it in a recommendation in the README for the layer. Eval'ing the
custom-set-faces directly in the config makes it difficult to revert the
customizations.