aboutsummaryrefslogtreecommitdiff
path: root/emacs
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <msabate@suse.com>2016-11-22 20:20:16 +0100
committerMiquel Sabaté Solà <msabate@suse.com>2016-11-22 20:20:16 +0100
commit893fed9cfaaee85b27be247df3cbd21badc4b3b5 (patch)
tree12bd80374db4b221bb854ccd219419b0ec2af67c /emacs
parentc58884a6de81f856a8943a3a72719f6f63a1691a (diff)
downloaddotfiles-893fed9cfaaee85b27be247df3cbd21badc4b3b5.tar.gz
dotfiles-893fed9cfaaee85b27be247df3cbd21badc4b3b5.zip
emacs: minor improvements
Signed-off-by: Miquel Sabaté Solà <msabate@suse.com>
Diffstat (limited to 'emacs')
-rw-r--r--emacs/init.el11
-rw-r--r--emacs/settings/init-edit.el5
-rw-r--r--emacs/settings/init-magit.el5
-rw-r--r--emacs/settings/init-misc.el5
-rw-r--r--emacs/settings/init-mu4e.el89
-rw-r--r--emacs/settings/init-project.el2
6 files changed, 65 insertions, 52 deletions
diff --git a/emacs/init.el b/emacs/init.el
index c1fda4e..3048b9c 100644
--- a/emacs/init.el
+++ b/emacs/init.el
@@ -52,20 +52,17 @@
(setq user-full-name "Miquel Sabaté Solà"
user-mail-address "mikisabate@gmail.com")
-;;; Lisp directories.
+;;; Basic configuration
-(add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory))
(add-to-list 'load-path (expand-file-name "settings" user-emacs-directory))
-;;; Basic configuration
-
(require 'init-general)
(require 'init-calendar)
(require 'defuns)
;;; Custom Lisp
-(require 'g)
+(byte-compile-file (concat user-emacs-directory "lisp/g.el") t)
;;; Initialize package and use-package.
@@ -86,7 +83,7 @@
(package-refresh-contents)
(package-install 'use-package))
-;;; And load the configuration for all the packages being used.
+;; And load the configuration for all the packages being used.
(require 'init-project)
(require 'init-edit)
@@ -96,7 +93,5 @@
(require 'init-mu4e)
(require 'init-lang)
-;; TODO: dired evil
-
(provide 'init)
;;; init.el ends here
diff --git a/emacs/settings/init-edit.el b/emacs/settings/init-edit.el
index 1948dca..eef2617 100644
--- a/emacs/settings/init-edit.el
+++ b/emacs/settings/init-edit.el
@@ -73,9 +73,10 @@
(define-key evil-normal-state-map (kbd "\C-e") 'er/expand-region)
(define-key evil-visual-state-map (kbd "\C-e") 'er/expand-region)))
-; Directly taken from: https://github.com/magnars/expand-region.el. This way we
-; can also expand the region into paragraphs and pages in text mode.
(defun er/add-text-mode-expansions ()
+ "This way we can also expand the region into paragraphs & pages in text mode.
+Directly taken from: https://github.com/magnars/expand-region.el."
+
(make-variable-buffer-local 'er/try-expand-list)
(setq er/try-expand-list (append
er/try-expand-list
diff --git a/emacs/settings/init-magit.el b/emacs/settings/init-magit.el
index 2adc3c6..ad6ccda 100644
--- a/emacs/settings/init-magit.el
+++ b/emacs/settings/init-magit.el
@@ -25,8 +25,9 @@
:config
; Proper initial states.
- (add-hook 'git-commit-mode-hook 'evil-insert-state)
- (evil-set-initial-state 'magit-log-edit-mode 'insert)
+ (with-eval-after-load 'evil
+ (add-hook 'git-commit-mode-hook 'evil-insert-state)
+ (evil-set-initial-state 'magit-log-edit-mode 'insert))
; When showing the status, hide the usually-redundant "branch" section and
; show the rest.
diff --git a/emacs/settings/init-misc.el b/emacs/settings/init-misc.el
index 1a2a64f..ab95aba 100644
--- a/emacs/settings/init-misc.el
+++ b/emacs/settings/init-misc.el
@@ -30,5 +30,10 @@
("C-c i" . crux-find-user-init-file)
("C-c o" . crux-open-with)))
+;; Dired
+(with-eval-after-load 'evil
+ (evil-add-hjkl-bindings dired-mode-map 'normal
+ (kbd "w") 'evil-forward-word-begin))
+
(provide 'init-misc)
;;; init-misc.el ends here
diff --git a/emacs/settings/init-mu4e.el b/emacs/settings/init-mu4e.el
index 90702cb..bf4c515 100644
--- a/emacs/settings/init-mu4e.el
+++ b/emacs/settings/init-mu4e.el
@@ -20,22 +20,12 @@
;;; Code:
-;; TODO: refile
-;;; http://comments.gmane.org/gmane.mail.mu.general/631
-;;; https://www.djcbsoftware.nl/code/mu/mu4e/Refiling-messages.html
-;;; https://www.djcbsoftware.nl/code/mu/mu4e/Smart-refiling.html
-;;; http://www.djcbsoftware.nl/code/mu/mu4e/Retrieval-and-indexing.html
-;; TODO: gmail flags
-
; I'm using an RPM that I've built on OBS which installs mu4e globally. See:
; https://build.opensuse.org/package/show/home:mssola/mu
(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e")
(require 'mu4e)
(when (featurep 'mu4e)
- ; Define a proper shortcut.
- (global-set-key (kbd "C-c m") 'mu4e)
-
;; Diferent SMTP options that will be used for each context.
(setq message-send-mail-function 'smtpmail-send-it
@@ -67,6 +57,21 @@
;; Define the different accounts that I'm using. This is only available since
;; mu 0.9.16.
+ ; https://www.reddit.com/r/emacs/comments/47t9ec/share_your_mu4econtext_configs/d0fsih6
+ (defun mu4e-message-maildir-matches (msg rx)
+ (when rx
+ (if (listp rx)
+ ;; if rx is a list, try each one for a match
+ (or (mu4e-message-maildir-matches msg (car rx))
+ (mu4e-message-maildir-matches msg (cdr rx)))
+ ;; not a list, check rx
+ (string-match rx (mu4e-message-field msg :maildir)))))
+
+ (defun suse-refile-folder (key)
+ "Returns the refile folder for the given SUSE account in the KEY arg"
+ (concat "/" key "/Archives/"
+ (format-time-string "%Y" (current-time))))
+
(setq mu4e-contexts
`(
;; GMail
@@ -77,14 +82,14 @@
(mssola-gmail-smtp))
:match-func (lambda (msg)
(when msg
- (mu4e-message-contact-field-matches
- msg :to "mikisabate@gmail.com")))
+ (mu4e-message-maildir-matches msg "^/gmail")))
:vars '(
(user-mail-address . "mikisabate@gmail.com")
(user-full-name . "Miquel Sabaté Solà")
(mu4e-reply-to-address . "mikisabate@gmail.com")
(mu4e-drafts-folder . "/gmail/Drafts")
(mu4e-sent-folder . "/gmail/Sent")
+ (mu4e-refile-folder . "/gmail/All")
(mu4e-trash-folder . "/gmail/Trash")))
;; suse.com
@@ -95,14 +100,14 @@
(mssola-suse-smtp))
:match-func (lambda (msg)
(when msg
- (mu4e-message-contact-field-matches
- msg :to "msabate@suse.com")))
- :vars '(
+ (mu4e-message-maildir-matches msg "^/susecom")))
+ :vars `(
(user-mail-address . "msabate@suse.com")
(user-full-name . "Miquel Sabaté Solà")
(mu4e-reply-to-address . "msabate@suse.com")
(mu4e-drafts-folder . "/susecom/Drafts")
(mu4e-sent-folder . "/susecom/Sent")
+ (mu4e-refile-folder . ,(suse-refile-folder "susecom"))
(mu4e-trash-folder . "/susecom/Trash")))
;; suse.de
@@ -113,14 +118,14 @@
(mssola-suse-smtp))
:match-func (lambda (msg)
(when msg
- (mu4e-message-contact-field-matches
- msg :to "msabate@suse.de")))
- :vars '(
+ (mu4e-message-maildir-matches msg "^/susede")))
+ :vars `(
(user-mail-address . "msabate@suse.de")
(user-full-name . "Miquel Sabaté Solà")
(mu4e-reply-to-address . "msabate@suse.de")
(mu4e-drafts-folder . "/susede/Drafts")
(mu4e-sent-folder . "/susede/Sent")
+ (mu4e-refile-folder . ,(suse-refile-folder "susede"))
(mu4e-trash-folder . "/susede/Trash")))))
; If mu4e cannot figure things out, ask me.
@@ -136,18 +141,22 @@
(mu4e-context-vars context)))))
mu4e-contexts)))
- ; Signature.
+ ; Setting my bookmarks
+ (setq mu4e-bookmarks
+ '(("maildir:/gmail/inbox OR maildir:/susecom/inbox OR maildir:/susede/inbox" "Inbox Folders" ?n)
+ ("flag:unread AND NOT flag:trashed" "Unread messages" ?u)
+ ("date:today..now" "Today's messages" ?t)))
+
+ ; Signature. This signature looks alright regardless of whether the client
+ ; supports format=flowed or not.
(setq mu4e-compose-signature
(concat
- "Miquel Sabaté Solà\n"
+ "Miquel Sabaté Solà,\n"
"PGP: 4096R / 1BA5 3C7A C93D CA2A CFDF DA97 96BE 8C6F D89D 6565\n"))
; Sign outgoing emails
(add-hook 'message-send-hook 'mml-secure-message-sign-pgpmime)
- ; Don't save message to Sent Messages, mbsync will take care of that.
- (setq mu4e-sent-messages-behavior 'delete)
-
;; To avoid UID clashes. See:
;; http://pragmaticemacs.com/emacs/fixing-duplicate-uid-errors-when-using-mbsync-and-mu4e/
(setq mu4e-change-filenames-when-moving t)
@@ -160,7 +169,7 @@
message-citation-line-function 'message-insert-formatted-citation-line
message-kill-buffer-on-exit t
mu4e-get-mail-command "mbsync -aqV"
- mu4e-update-interval 120
+ mu4e-update-interval 600
mu4e-compose-dont-reply-to-self t
mu4e-headers-skip-duplicates t
mu4e-headers-include-related t
@@ -212,33 +221,33 @@
(add-to-list 'mu4e-view-actions
'("xViewXWidget" . my-mu4e-action-view-with-xwidget) t)
- ; Spell check
+ ; Spell check and format=flowed
(add-hook 'mu4e-compose-mode-hook
(lambda ()
"My settings for message composition."
- (set-fill-column 99999)
+ (set-fill-column 80)
+ (use-hard-newlines t 'guess)
(flyspell-mode)))
- ; Restore some of my evil config.
- ; TODO: doesn't work
- (dolist (imap '(mu4e-main-mode-map mu4e-headers-mode-map mu4e-view-mode-map))
- (evil-define-key 'evil-mu4e-state imap
- "\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))
+ (add-hook 'mu4e-view-mode-hook (lambda () (visual-line-mode 1)))
+
+ ; Enter insert mode automatically when writing a new email.
+ (with-eval-after-load 'evil
+ (evil-set-initial-state 'mu4e-compose-mode 'insert))
; Desktop notifications
(use-package mu4e-alert
:ensure t
:config
+ ; Notify me for unread emails from my inbox.
(mu4e-alert-set-default-style 'libnotify)
(add-hook 'after-init-hook #'mu4e-alert-enable-notifications)
(add-hook 'after-init-hook #'mu4e-alert-enable-mode-line-display)
(setq mu4e-alert-interesting-mail-query
- "flag:unread AND NOT flag:trashed")
+ (concat
+ "(maildir:/gmail/inbox OR maildir:/susecom/inbox OR maildir:/susede/inbox) "
+ "AND flag:unread AND NOT flag:trashed"))
(setq mu4e-alert-email-notification-types '(count)))
; Evil mode in mu4e
@@ -250,13 +259,15 @@
; Idea taken from evil-mu4e.el
(defvar mssola-evil-mu4e-mode-map-bindings
`((,evil-mu4e-state mu4e-headers-mode-map "\C-u" evil-scroll-up)
- (,evil-mu4e-state mu4e-main-mode-map "\C-u" evil-scroll-up)))
+ (,evil-mu4e-state mu4e-main-mode-map "\C-u" evil-scroll-up)
+ (,evil-mu4e-state mu4e-view-mode-map "h" evil-backward-char)))
(dolist (binding mssola-evil-mu4e-mode-map-bindings)
(evil-define-key
- (nth 0 binding) (nth 1 binding) (nth 2 binding) (nth 3 binding))))))
+ (nth 0 binding) (nth 1 binding) (nth 2 binding) (nth 3 binding)))))
-(setq mu4e-update-interval 120)
+ ; Define a proper shortcut.
+ (global-set-key (kbd "C-c m") 'mu4e))
(provide 'init-mu4e)
;;; init-mu4e.el ends here
diff --git a/emacs/settings/init-project.el b/emacs/settings/init-project.el
index c3f7a03..9e265f1 100644
--- a/emacs/settings/init-project.el
+++ b/emacs/settings/init-project.el
@@ -41,7 +41,7 @@
(use-package projectile
:ensure t
:config
- (projectile-global-mode +1)
+ (projectile-mode 1)
(setq projectile-mode-line
'(:eval (format " %s" (projectile-project-name)))))