diff options
| author | Miquel Sabaté Solà <msabate@suse.com> | 2017-02-10 10:03:06 +0100 |
|---|---|---|
| committer | Miquel Sabaté Solà <msabate@suse.com> | 2017-02-10 10:03:06 +0100 |
| commit | 08bb43b31a206b56069df0fafc206941947be6ec (patch) | |
| tree | 1cf03bded9628ce42087dcfa2b426fc6fbac6af4 | |
| parent | d8fa86e10c12a380d5a04883af7c87a070b22279 (diff) | |
| download | dotfiles-08bb43b31a206b56069df0fafc206941947be6ec.tar.gz dotfiles-08bb43b31a206b56069df0fafc206941947be6ec.zip | |
emacs: general fixes
- projectile: removed the format definition. I didn't know that the default
format already took into account clashes between files from different
projects. This way I don't need other packages like =uniquify=.
- crux: fixed bindings.
- magit: added a binding for =magit-blame= and improved the documentation.
- ohers: added the =mssola-face-at-point= function
Signed-off-by: Miquel Sabaté Solà <msabate@suse.com>
| -rw-r--r-- | emacs/init.html | 118 | ||||
| -rw-r--r-- | emacs/init.org | 104 |
2 files changed, 157 insertions, 65 deletions
diff --git a/emacs/init.html b/emacs/init.html index f79b590..e751911 100644 --- a/emacs/init.html +++ b/emacs/init.html @@ -4,7 +4,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>mssola's GNU Emacs configuration</title> -<!-- 2017-02-08 Wed 17:48 --> +<!-- 2017-02-10 Fri 10:02 --> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta name="generator" content="Org-mode" /> <meta name="author" content="Miquel Sabaté Solà" /> @@ -425,6 +425,28 @@ I've hacked my own theme called <a href="https://github.com/mssola/soria">soria< <pre class="src src-elisp"><span class="org-rainbow-delimiters-depth-1">(</span>load-theme 'soria t<span class="org-rainbow-delimiters-depth-1">)</span> </pre> </div> + +<p> +When hacking your own theme, sometimes you want to know what face is the one +that you see on the screen right now. This function from <a href="https://github.com/thblt/DotFiles">@thblt</a> allows me to +get exactly that: +</p> + +<div class="org-src-container"> + +<pre class="src src-elisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defun</span> <span class="org-function-name">mssola-face-at-point</span> <span class="org-rainbow-delimiters-depth-2">(</span>pos<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-doc">"Writes a message with the name of the face at the current point. The POS</span> +<span class="org-doc"> argument contains the current position of the cursor."</span> + + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">interactive</span> <span class="org-string">"d"</span><span class="org-rainbow-delimiters-depth-2">)</span> + + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">let</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span>face <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-keyword">or</span> <span class="org-rainbow-delimiters-depth-6">(</span>get-char-property <span class="org-rainbow-delimiters-depth-7">(</span>point<span class="org-rainbow-delimiters-depth-7">)</span> 'read-face-name<span class="org-rainbow-delimiters-depth-6">)</span> + <span class="org-rainbow-delimiters-depth-6">(</span>get-char-property <span class="org-rainbow-delimiters-depth-7">(</span>point<span class="org-rainbow-delimiters-depth-7">)</span> 'face<span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">if</span> face <span class="org-rainbow-delimiters-depth-4">(</span>message <span class="org-string">"Face: %s"</span> face<span class="org-rainbow-delimiters-depth-4">)</span> <span class="org-rainbow-delimiters-depth-4">(</span>message <span class="org-string">"No face at %d"</span> pos<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span>global-set-key <span class="org-rainbow-delimiters-depth-2">(</span>kbd <span class="org-string">"C-c f"</span><span class="org-rainbow-delimiters-depth-2">)</span> 'mssola-face-at-point<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> </div> </div> @@ -790,9 +812,7 @@ Then, for keeping up with my projects I use the Projectile + Helm combination. <pre class="src src-elisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">projectile</span> <span class="org-builtin">:ensure</span> t <span class="org-builtin">:config</span> - <span class="org-rainbow-delimiters-depth-2">(</span>projectile-mode 1<span class="org-rainbow-delimiters-depth-2">)</span> - <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> projectile-mode-line - '<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-builtin">:eval</span> <span class="org-rainbow-delimiters-depth-4">(</span>format <span class="org-string">" %s"</span> <span class="org-rainbow-delimiters-depth-5">(</span>projectile-project-name<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>projectile-mode 1<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">helm</span> <span class="org-builtin">:ensure</span> t @@ -1381,34 +1401,67 @@ certainly useful for some common tasks (I guess that I still need some learning) <pre class="src src-elisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">magit</span> <span class="org-builtin">:ensure</span> t <span class="org-builtin">:config</span> +</pre> +</div> - <span class="org-comment-delimiter">; </span><span class="org-comment">Proper initial states.</span> - <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">with-eval-after-load</span> 'evil - <span class="org-rainbow-delimiters-depth-3">(</span>add-hook 'git-commit-mode-hook 'evil-insert-state<span class="org-rainbow-delimiters-depth-3">)</span> - <span class="org-rainbow-delimiters-depth-3">(</span>evil-set-initial-state 'magit-log-edit-mode 'insert<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> +<p> +In some cases normal mode is not the right mode (e.g. commit mode). For these +cases, set the proper default mode. +</p> - <span class="org-comment-delimiter">; </span><span class="org-comment">When showing the status, hide the usually-redundant "branch" section and</span> - <span class="org-comment-delimiter">; </span><span class="org-comment">show the rest.</span> - <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'magit-section-set-visibility-hook - '<span class="org-rainbow-delimiters-depth-3">(</span>lambda <span class="org-rainbow-delimiters-depth-4">(</span>section<span class="org-rainbow-delimiters-depth-4">)</span> - <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">if</span> <span class="org-rainbow-delimiters-depth-5">(</span>string= <span class="org-rainbow-delimiters-depth-6">(</span>magit-section-type section<span class="org-rainbow-delimiters-depth-6">)</span> <span class="org-string">"branch"</span><span class="org-rainbow-delimiters-depth-5">)</span> - 'hide - 'show<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> +<div class="org-src-container"> - <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">with-eval-after-load</span> 'evil-leader - <span class="org-rainbow-delimiters-depth-3">(</span>evil-leader/set-key <span class="org-string">"s"</span> 'magit-status<span class="org-rainbow-delimiters-depth-3">)</span> +<pre class="src src-elisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">with-eval-after-load</span> 'evil + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'git-commit-mode-hook 'evil-insert-state<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>evil-set-initial-state 'magit-log-edit-mode 'insert<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +When showing the status, hide the usually-redundant "branch" section and show +the rest. +</p> - <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">use-package</span> <span class="org-constant">evil-magit</span> - <span class="org-builtin">:ensure</span> t - <span class="org-builtin">:config</span> +<div class="org-src-container"> + +<pre class="src src-elisp"><span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'magit-section-set-visibility-hook + '<span class="org-rainbow-delimiters-depth-2">(</span>lambda <span class="org-rainbow-delimiters-depth-3">(</span>section<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">if</span> <span class="org-rainbow-delimiters-depth-4">(</span>string= <span class="org-rainbow-delimiters-depth-5">(</span>magit-section-type section<span class="org-rainbow-delimiters-depth-5">)</span> <span class="org-string">"branch"</span><span class="org-rainbow-delimiters-depth-4">)</span> + 'hide + 'show<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +Set a key binding for <code>magit-blame</code>. +</p> + +<div class="org-src-container"> + +<pre class="src src-elisp"><span class="org-rainbow-delimiters-depth-1">(</span>global-set-key <span class="org-rainbow-delimiters-depth-2">(</span>kbd <span class="org-string">"C-c b"</span><span class="org-rainbow-delimiters-depth-2">)</span> 'magit-blame<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> - <span class="org-comment-delimiter">; </span><span class="org-comment">The magit + evil-magit combo messes up some chords, let's fix this.</span> - <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">evil-define-key</span> 'normal magit-mode-map - <span class="org-string">"\C-h"</span> 'evil-window-left - <span class="org-string">"\C-l"</span> 'evil-window-right - <span class="org-string">"\C-j"</span> 'evil-window-down - <span class="org-string">"\C-k"</span> 'evil-window-up - <span class="org-string">"\M-p"</span> 'helm-projectile-switch-project<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +<p> +And repair some key bindings from Evil mode. +</p> + +<div class="org-src-container"> + +<pre class="src src-elisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">with-eval-after-load</span> 'evil-leader + <span class="org-rainbow-delimiters-depth-2">(</span>evil-leader/set-key <span class="org-string">"s"</span> 'magit-status<span class="org-rainbow-delimiters-depth-2">)</span> + + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">use-package</span> <span class="org-constant">evil-magit</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + + <span class="org-comment-delimiter">; </span><span class="org-comment">The magit + evil-magit combo messes up some chords, let's fix this.</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">evil-define-key</span> 'normal magit-mode-map + <span class="org-string">"\C-h"</span> 'evil-window-left + <span class="org-string">"\C-l"</span> 'evil-window-right + <span class="org-string">"\C-j"</span> 'evil-window-down + <span class="org-string">"\C-k"</span> 'evil-window-up + <span class="org-string">"\M-p"</span> 'helm-projectile-switch-project<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-rainbow-delimiters-unmatched">)</span> </pre> </div> </div> @@ -2605,13 +2658,16 @@ too many things into my leader and these shortcuts look sensible to me). <pre class="src src-elisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">crux</span> <span class="org-builtin">:ensure</span> t - <span class="org-builtin">:bind</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"C-c d"</span> . crux-delete-file-and-buffer<span class="org-rainbow-delimiters-depth-3">)</span> - <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"C-c r"</span> . crux-rename-file-and-buffer<span class="org-rainbow-delimiters-depth-3">)</span> - <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"C-c o"</span> . crux-open-with<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + <span class="org-builtin">:config</span> + + <span class="org-rainbow-delimiters-depth-2">(</span>global-set-key <span class="org-rainbow-delimiters-depth-3">(</span>kbd <span class="org-string">"C-c d"</span><span class="org-rainbow-delimiters-depth-3">)</span> 'crux-delete-file-and-buffer<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>global-set-key <span class="org-rainbow-delimiters-depth-3">(</span>kbd <span class="org-string">"C-c r"</span><span class="org-rainbow-delimiters-depth-3">)</span> 'crux-rename-file-and-buffer<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>global-set-key <span class="org-rainbow-delimiters-depth-3">(</span>kbd <span class="org-string">"C-c o"</span><span class="org-rainbow-delimiters-depth-3">)</span> 'crux-open-with<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> </pre> </div> </div> </div> + <div id="outline-container-sec-18" class="outline-2"> <h2 id="sec-18">Credits</h2> <div class="outline-text-2" id="text-18"> @@ -2665,7 +2721,7 @@ along with this program. If not, see <a href="http://www.gnu.org/licenses/">< </div> <div id="postamble" class="status"> <p class="author">Author: Miquel Sabaté Solà</p> -<p class="date">Created: 2017-02-08 Wed 17:48</p> +<p class="date">Created: 2017-02-10 Fri 10:02</p> <p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 25.1.1 (<a href="http://orgmode.org">Org</a> mode 8.2.10)</p> <p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p> </div> diff --git a/emacs/init.org b/emacs/init.org index 5632fa3..4444da9 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -200,6 +200,24 @@ I've hacked my own theme called [[https://github.com/mssola/soria][soria]]. This (load-theme 'soria t) #+END_SRC +When hacking your own theme, sometimes you want to know what face is the one +that you see on the screen right now. This function from [[https://github.com/thblt/DotFiles][@thblt]] allows me to +get exactly that: + +#+BEGIN_SRC elisp +(defun mssola-face-at-point (pos) + "Writes a message with the name of the face at the current point. The POS + argument contains the current position of the cursor." + + (interactive "d") + + (let ((face (or (get-char-property (point) 'read-face-name) + (get-char-property (point) 'face)))) + (if face (message "Face: %s" face) (message "No face at %d" pos)))) + +(global-set-key (kbd "C-c f") 'mssola-face-at-point) +#+END_SRC + ** General global key bindings Use kill-this-buffer instead of kill-buffer. @@ -440,9 +458,7 @@ Then, for keeping up with my projects I use the Projectile + Helm combination. (use-package projectile :ensure t :config - (projectile-mode 1) - (setq projectile-mode-line - '(:eval (format " %s" (projectile-project-name))))) + (projectile-mode 1)) (use-package helm :ensure t @@ -922,37 +938,54 @@ A git porcelain for GNU Emacs. Even if I'm still using the git CLI, it's certainly useful for some common tasks (I guess that I still need some learning). #+BEGIN_SRC elisp - (use-package magit - :ensure t - :config +(use-package magit + :ensure t + :config +#+END_SRC - ; Proper initial states. - (with-eval-after-load 'evil - (add-hook 'git-commit-mode-hook 'evil-insert-state) - (evil-set-initial-state 'magit-log-edit-mode 'insert)) +In some cases normal mode is not the right mode (e.g. commit mode). For these +cases, set the proper default mode. + +#+BEGIN_SRC elisp + (with-eval-after-load 'evil + (add-hook 'git-commit-mode-hook 'evil-insert-state) + (evil-set-initial-state 'magit-log-edit-mode 'insert)) +#+END_SRC - ; When showing the status, hide the usually-redundant "branch" section and - ; show the rest. - (add-hook 'magit-section-set-visibility-hook - '(lambda (section) - (if (string= (magit-section-type section) "branch") - 'hide - 'show))) +When showing the status, hide the usually-redundant "branch" section and show +the rest. - (with-eval-after-load 'evil-leader - (evil-leader/set-key "s" 'magit-status) +#+BEGIN_SRC elisp + (add-hook 'magit-section-set-visibility-hook + '(lambda (section) + (if (string= (magit-section-type section) "branch") + 'hide + 'show))) +#+END_SRC - (use-package evil-magit - :ensure t - :config +Set a key binding for =magit-blame=. - ; The magit + evil-magit combo messes up some chords, let's fix this. - (evil-define-key 'normal magit-mode-map - "\C-h" 'evil-window-left - "\C-l" 'evil-window-right - "\C-j" 'evil-window-down - "\C-k" 'evil-window-up - "\M-p" 'helm-projectile-switch-project)))) +#+BEGIN_SRC elisp + (global-set-key (kbd "C-c b") 'magit-blame) +#+END_SRC + +And repair some key bindings from Evil mode. + +#+BEGIN_SRC elisp + (with-eval-after-load 'evil-leader + (evil-leader/set-key "s" 'magit-status) + + (use-package evil-magit + :ensure t + :config + + ; The magit + evil-magit combo messes up some chords, let's fix this. + (evil-define-key 'normal magit-mode-map + "\C-h" 'evil-window-left + "\C-l" 'evil-window-right + "\C-j" 'evil-window-down + "\C-k" 'evil-window-up + "\M-p" 'helm-projectile-switch-project)))) #+END_SRC * mu4e @@ -1875,12 +1908,15 @@ Emacs style instead of being more Vim-like on purpose (I don't want to put too many things into my leader and these shortcuts look sensible to me). #+BEGIN_SRC elisp - (use-package crux - :ensure t - :bind (("C-c d" . crux-delete-file-and-buffer) - ("C-c r" . crux-rename-file-and-buffer) - ("C-c o" . crux-open-with))) +(use-package crux + :ensure t + :config + + (global-set-key (kbd "C-c d") 'crux-delete-file-and-buffer) + (global-set-key (kbd "C-c r") 'crux-rename-file-and-buffer) + (global-set-key (kbd "C-c o") 'crux-open-with)) #+END_SRC + * Credits I've built this file by simply scavenging from other people's emacs.d/dotfiles |
