If emacs is launched with -q option and spacemacs files are loaded via
--eval option, then spacemacs fails due to depending `after-init-time'
variable being set properly which is done only when emacs is launched
without -q. This patch is to remove this dependence so that spacemacs
launched with -q can still work. This is done by introducing
`spacemacs-initialized' variable which is set properly regardless of
which command line options are present or absent.
Motivation
While disabling Evil in holy-mode makes its implementation shorter and
sounds elegant on the paper, in practice it puts a big burden on the
configuration parts which need to know if Evil is enable or not. This is
a bad separation of concerns and the bunch of fixes that we were forced
to do in the past weeks shows this issue. Those fixes were about
removing the knowledge of the activation of Evil by implementing new
dispatching functions to be used by layers, this is cumbersome and makes
Spacemacs layer configuration more subtle which is not good. There was
additional bad consequences of the removal of Evil state like the
impossibility to use Evil lisp state or iedit states, or we would have
been forced to implement a temporary activation of Evil which is
awkward.
Instead I reintroduce Evil as the central piece of Spacemacs design thus
Evil is now re-enabled in holy-mode. It provides the abstraction we need
to isolate editing styles and be able to grow the Spacemacs
configuration coverage sanely. Layers don't need to check whether the
holy mode is active or not and they don't need to know if Evil is
available (it is always available). We also don't need to write
additional dispatching functions, this is the job of Evil, and I think
it provides everything for this. Ideally configuration layer should be
implemented with only Evil in mind and the holy-mode (and hybrid-mode)
should magically make it work for Emacs style users, for instance we can
freely use `evil-insert-state` anywhere in the code without any guard.
Evil is now even more part of Spacemacs, we can really say that
Spacemacs is Emacs+Evil which is now an indivisible pair. Spacemacs
needed this stable API to continue on the right track.
While these changes should be rather transparent to the user, I'm sorry
for this experimental period, I failed to see all the implications of
such a change, I was just excited about the possibility to make Evil
optional. The reality is that Spacemacs has to embrace it and keep its
strong position on being Emacs+Evil at the core.
Implementation
- insert, motion and normal states are forced to emacs state using an
advice on `evil-insert-state`, `evil-motion-state` and
`evil-normal-state` respectively. These functions can be used freely in
the layer configuration.
- A new general hook `spacemacs-editing-style-hook` allow to hook any
code that need to be configured based on the editing style. Functions
hooked to this hook takes the current style as parameter, this
basically generalize the hook used to setup hjkl navigation bindings.
- ESC has been removed from the emacs state map.
- Revert unneeded changes
- Revert "evil: enter insert-state only from normal-state"
commit bdd702dfbe.
- Revert "avoid being evil in deft with emacs editing style"
commit f3a16f49ed.
Additional changes
All editing style packages have been moved to a layer called
`spacemacs-editing-styles`
Notes
I did not have time to attack hybrid mode, I should be able to do it
later.
In *spacemacs* buffer, the quick help in `[?]` shows that `m` jumps to
the menu. However, if one customizes the startup lists by setting
`dotspacemacs-startup-lists '(recents bookmarks projects)`, the shortcut
`m` of jumping to the menu would be shadowed and `m` jumps to Bookmarks.
With the help of travisbhartwell and TheBB, I changed the shortcut of
jumping to the Bookmarks to `a` to avoid this shortcut conflict.
1. Don't use beginning-of-buffer (or end):
These are for interactive use only according to compiler
2. reduce => cl-reduce
3. next-line => forward-line
next-line is only for interactive use
4. set-default-font => set-frame-font
set-default-font is obsolete since 23.1
5. show-subtree => outline-show-subtree (alias)
6. show-all => outline-show-all (alias)
evil-set-initial-state is safer than manually adding and deleting from
the lists, because it knows about all available states and ensures that
the mode only shows up in one list. If it is in multiple list the
initial state depends on which is checked first, which we don't want.
This part doesn't seem to be needed any longer. I tested it in terminal
and in GUI modes, both with spacemacs and spacemacs-base distributions,
both with and without a banner: No visual difference with and without
this code.
Add a spacemacs update button to the spacemacs buffer, and relabel the
package update button to read "Update Packages". This will hopefully
resolve some confusion about updating spacemacs vs. updating the
packages.
I also tweaked the switch-to-version function to make it a little more
verbose to use it for the spacemacs update button.
Instead of opening the file for the bookmark, use the bookmark-jump
function to properly jump to the file and location in the file. Also
show the bookmark name and the filename in the list.
Fixessyl20bnr/spacemacs#2431
Currently, pressing TAB does not move to next widget. Similarly,
pressing RET does not run the button at point. Use `kbd` function to
properly convert to internal key representation in Emacs that is usable
in both GUI and terminal.
Also move the key bindings to spacemacs/keybindings.el since it's a more
suitable place.
bookmark-all-names returns a list of names, but
spacemacs-buffer//insert-file-list expect a list of filenames.
Shortcut definitions seems to be a mix of two approaches/commits.
Removed the unused bits.
Refactor spacemacs/open-file to spacemacs/view-org-file to correctly
reflect its functionality. In Emacs, view means read-only. Make the
anchor-text optional so we can omit when not needed. Also add
expand-scope that can be either 'subtree or 'all to open a tree at point
or expand everything. 'subtree is used for the Change Log while 'all is
used for all Spacemacs documents.
Currently helm-spacemacs//documentation-candidates grabs everything it
can in the doc directory. In the future we might put some images there
so better just choose the correct file type to include.
Otherwise when the widget list is deleted to insert new widgets, the
separator "widget" is essentially text with properties and can cause
error when trying to delete, which breaks quick help and release note
buttons, making the buttons not function anymore.
- Modularize and add quickhelp button
Split the current hardcoded release note display functions into smaller
reusable functions. Then reuse it for creating quickhelp button.
- fix: bind widget-button-click to left mouse click
widget-button-press is for keyboard and binding it to a left mouse
button is not suitable. The clicks on buttons are often ignored. Use the
proper widget-button-click.
- Since this is develop, point it to 0.102.x
- Beautify org CHANGELOG
Setting org-indent-mode hides the leading stars of all Org headers except
the last one just enough to indicate indentation, which make it easier
to read. Also, put it in read-only-mode so user don't accidentially mess
up his reading material.
Also put the CHANGELOG in view-mode for reading and navigating read-only
content.
- Add Evil and Emacs tutorial buttons to quickhelp
So it is even easier for first time users.
Also refactor spacemacs-buffer//insert-release-note:
- Change it to spacemacs-buffer//insert-note
- Just insert content. Widgets are optional
- Insert different widget from the two functions
spacemacs-buffer//insert-quickhelp-widget and spacemacs-buffer//insert-release-note-widget
- Put the cursor on the quickhelp button
So that users can start using it immediately. New users only knows RET
to press a button and learn the rest there.
- Add m to jump back to top menu
Also update the quickhelp content.
Currently, `r` and `p` moves to different locations when the change log
text is folded/unfolded. Make it always jumps to the correct location
regardless of content of home buffer by actually search for it.
Also set keys to make home buffer usable with holy-mode.
Conflicts:
core/core-spacemacs-buffer.el
- backup the packages to be updated
- then delete them
- the user restart emacs and spacemacs will install the last version
Fixes some update errors related to byte-compilation like the one
which affected the powerline (void variable left)
This commit also adds some page break for clarity