ambevar-dotfiles/.emacs.d/lisp/main.el

382 lines
13 KiB
EmacsLisp
Raw Normal View History

2016-10-14 14:03:30 +02:00
;; Main options
2014-03-08 11:48:35 +01:00
;; Minimal UI. Load early to hide as soon as possible.
(setq inhibit-startup-screen t)
(if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
(menu-bar-mode -1)
(when (fboundp 'set-scroll-bar-mode)
(set-scroll-bar-mode 'left)
(scroll-bar-mode -1)
(define-key mickey-minor-mode-map (kbd "C-<f6>") 'toggle-scroll-bar))
2014-03-08 11:48:35 +01:00
2013-06-18 17:14:31 +02:00
;; Remember last cursor position.
(require 'saveplace)
(setq save-place-file (concat emacs-cache-folder "saveplace"))
2016-10-05 06:56:16 +02:00
(setq-default save-place-mode t)
2014-03-03 21:05:09 +01:00
;; When the daemon is killed abruptly, places are not saved. Adding this hook
;; allows to save places at a strategic moment.
(add-hook 'before-save-hook 'save-place-kill-emacs-hook)
2014-03-10 11:26:12 +01:00
;; url-cookie
(setq url-cookie-file (concat emacs-cache-folder "url.cookies"))
2014-02-21 20:14:50 +01:00
;; Bookmark file to cache folder.
(setq bookmark-default-file (concat emacs-cache-folder "emacs.bmk"))
;; Recent files.
2016-06-09 18:20:38 +02:00
(setq recentf-save-file (concat emacs-cache-folder "recentf"))
2013-06-18 17:14:31 +02:00
;; Disable autosave features.
(setq auto-save-default nil)
2013-06-04 20:51:04 +02:00
(setq auto-save-list-file-prefix nil)
2013-06-18 17:14:31 +02:00
;; Place backup files in specific directory.
(setq backup-directory-alist
2013-07-09 11:25:15 +02:00
`((".*" . ,(concat emacs-cache-folder "backups/"))))
2013-06-12 22:56:30 +02:00
;; Other backup options.
; (setq backup-inhibited t) ;; Disable backup files.
; (setq make-backup-files t) ;; Enable backup files.
; (setq version-control t) ;; Enable numbered versioning.
;; Default mode
(setq default-major-mode 'text-mode)
2013-06-18 17:14:31 +02:00
;; Disable suspend key since it is useless on Emacs server.
(global-unset-key (kbd "C-z"))
(global-unset-key (kbd "C-x C-z"))
2013-03-04 17:31:57 +01:00
;; Make questions less annoying.
(defalias 'yes-or-no-p 'y-or-n-p)
2013-10-20 18:19:19 +02:00
;; Allow some protected functions.
(put 'upcase-region 'disabled nil)
(put 'downcase-region 'disabled nil)
2014-02-23 13:54:39 +01:00
(put 'narrow-to-page 'disabled nil)
2013-10-20 18:19:19 +02:00
;; Print column number in mode line.
(column-number-mode 1)
;; Print buffer size in mode line.
(size-indication-mode 1)
2013-03-04 17:31:57 +01:00
;; Kill whole line including \n.
(setq kill-whole-line t)
2013-02-26 12:04:44 +01:00
;; Alternative scrolling
(define-key mickey-minor-mode-map [next]
(lambda () (interactive)
(if (string= major-mode "doc-view-mode")
(doc-view-next-page)
(condition-case nil (scroll-up)
(end-of-buffer (goto-char (point-max)))))))
(define-key mickey-minor-mode-map [prior]
(lambda () (interactive)
(if (string= major-mode "doc-view-mode")
(doc-view-previous-page)
(condition-case nil (scroll-down)
(beginning-of-buffer (goto-char (point-min)))))))
(define-key mickey-minor-mode-map (kbd "C-x M-n") (lambda () (interactive) (narrow-to-page 1)))
(define-key mickey-minor-mode-map (kbd "C-x M-p") (lambda () (interactive) (narrow-to-page -1)))
2014-02-23 13:54:39 +01:00
;; Line numbers
2013-05-24 11:44:23 +02:00
(add-hook 'find-file-hook (lambda () (linum-mode 1)))
(define-key mickey-minor-mode-map (kbd "C-<f5>") 'linum-mode)
(add-hook
'linum-before-numbering-hook
(lambda () (if (display-graphic-p) (setq linum-format "%d") (setq linum-format "%d "))))
;; Indentation
2014-10-24 14:58:38 +02:00
(setq-default tab-width 2)
(defvaralias 'standard-indent 'tab-width)
(setq-default indent-tabs-mode t)
2014-10-30 20:51:42 +01:00
;; Lisp should not use tabs.
(mapcar
(lambda (hook)
(add-hook
hook
(lambda ()
(setq indent-tabs-mode nil))))
'(lisp-mode-hook emacs-lisp-mode-hook))
(add-hook
'emacs-lisp-mode-hook
(lambda ()
(local-set-key (kbd "M-.") 'find-symbol-at-point)))
2014-11-10 00:02:42 +01:00
(add-hook
'change-log-mode-hook
(lambda ()
(setq tab-width 2)
(setq left-margin 2)))
;; This needs to be set globally since they are defined as local variable and
;; Emacs does not know how to set an alias on a local variable.
(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'sh-basic-offset 'tab-width)
;; Line by line scrolling
(setq scroll-step 1)
2015-04-26 17:17:08 +02:00
;; Autofill tweak.
2014-02-23 13:54:39 +01:00
(setq sentence-end-double-space nil)
;; There is no prog-mode-hook on Emacs<24.
(require 'functions) ; for `page-number-mode'
(add-hook
'prog-mode-hook
(lambda ()
(page-number-mode t)))
(define-key mickey-minor-mode-map (kbd "C-<f7>") 'whitespace-mode)
2014-11-12 15:09:14 +01:00
(setq
whitespace-style
'(face empty indentation space-after-tab space-before-tab tab-mark trailing))
;; `whitespace-report' will mistakenly always report empty lines at
;; beginning and end of buffer as long as there is at least one empty line.
;; `whitespace-cleanup' works properly however.
;; DONE: Reported at http://debbugs.gnu.org/cgi/bugreport.cgi?bug=23740.
; (setq whitespace-action '(report-on-bogus))
;; WARNING: this can break some configuration files needing whitespaces at the
;; end.
; (require 'functions) ; for `sanitize'
; (add-hook 'before-save-hook 'sanitize)
(add-hook 'before-save-hook 'delete-trailing-whitespace)
;; Hippie expand.
;; (define-key mickey-minor-mode-map (kbd "M-/") 'hippie-expand)
;; Abbreviation support
2014-02-13 17:30:36 +01:00
(setq-default abbrev-mode t)
;; Set Fill Column
(setq-default fill-column 80)
(add-hook 'text-mode-hook 'turn-on-auto-fill)
;; Set man pages to display on a 80 character wide window.
(setenv "MANWIDTH" "80")
2016-07-21 13:37:46 +02:00
;; Enforce horizontal splitting. 140 means that the window is large enough to
;; hold 2 other windows of 70 columns.
(setq split-height-threshold nil)
(setq split-width-threshold 140)
2013-06-18 17:14:31 +02:00
;; Windmove mode: easy window switching with Shift+arrows.
(when (fboundp 'windmove-default-keybindings)
(define-key mickey-minor-mode-map (kbd "M-s-h") 'windmove-left)
(define-key mickey-minor-mode-map (kbd "M-s-j") 'windmove-down)
(define-key mickey-minor-mode-map (kbd "M-s-k") 'windmove-up)
(define-key mickey-minor-mode-map (kbd "M-s-l") 'windmove-right))
2013-06-18 17:14:31 +02:00
;; Make Emacs use environment browser, or w3m if BROWSER is not set.
2013-02-26 18:30:31 +01:00
(setq browse-url-generic-program
(executable-find
(let ((b (getenv "BROWSER")))
(if b b "w3m" )))
browse-url-browser-function 'browse-url-generic)
2012-11-13 18:46:20 +01:00
;; Default ispell dictionnay. If not set, Emacs uses the current locale.
(setq ispell-dictionary "english")
(define-key mickey-minor-mode-map
(kbd "<f5>")
(lambda () (interactive) (ispell-change-dictionary "english")))
(define-key mickey-minor-mode-map
(kbd "<f6>")
(lambda () (interactive) (ispell-change-dictionary "francais")))
(define-key mickey-minor-mode-map
(kbd "<f7>")
(lambda () (interactive) (ispell-change-dictionary "svenska")))
2012-12-21 21:30:54 +01:00
2013-01-08 00:36:02 +01:00
;; Long paragraphs. Useful for quick navigation with backward-paragraph and
;; forward-paragraph.
(setq paragraph-start "
")
;; Show matching parenthesis
(show-paren-mode 1)
;; By default, theres a small delay before showing a matching parenthesis. Set
;; it to 0 to deactivate.
(setq show-paren-delay 0)
2016-10-05 06:56:16 +02:00
(setq show-paren-when-point-inside-paren t)
2013-01-23 14:59:25 +01:00
;; query-replace-regex fix on terminals.
(if (not (fboundp 'tool-bar-mode)) (define-key mickey-minor-mode-map (kbd "C-M-y") 'query-replace-regexp))
;; Electric Pairs to auto-complete () [] {} "" etc. You can use it on regions.
;; (if (>= emacs-major-version 24)
;; (electric-pair-mode 1))
;; Run ranger asynchronously.
(define-key mickey-minor-mode-map (kbd "C-x D")
(lambda () (interactive)
2014-03-05 11:14:16 +01:00
(let ((term (getenv "TERMCMD")))
(when (and (executable-find "ranger") (executable-find term))
(start-process "dummy" nil term "-e" "ranger")))))
;; Calendar ISO display.
(setq calendar-week-start-day 1)
(setq calendar-date-style 'iso)
;; Quick buffer switching.
(define-key mickey-minor-mode-map (kbd "C-<prior>") 'previous-buffer)
(define-key mickey-minor-mode-map (kbd "C-<next>") 'next-buffer)
2015-10-19 15:15:12 +02:00
;; Remove auto-fill in web edits because wikis and forums do not like it.
;; This works for qutebrowser, but may need changes for other browsers.
(add-hook
'find-file-hook
(lambda ()
2015-10-19 15:15:12 +02:00
(if (string-match (concat (getenv "BROWSER") "-editor-*") (buffer-name))
(auto-fill-mode -1))))
;; Compilation bindings and conveniences.
(require 'functions) ; for `compile-custom'
(setq compilation-ask-about-save nil)
(autoload 'recompile "compile" nil t)
(define-key mickey-minor-mode-map (kbd "<f10>") 'compile-custom)
(define-key mickey-minor-mode-map (kbd "<f11>") 'previous-error)
(define-key mickey-minor-mode-map (kbd "<f12>") 'next-error)
;; Code browsing: make C-M-e jump to next function instead of the end of the current function.
(define-key mickey-minor-mode-map (kbd "C-M-e") (lambda () (interactive) (beginning-of-defun -1)))
2013-06-12 23:40:20 +02:00
;; Common LISP
(setq inferior-lisp-program "clisp")
(defadvice desktop-owner (after pry-from-cold-dead-hands activate)
"Don't allow dead emacsen to own the desktop file."
(when (not (emacs-process-p ad-return-value))
(setq ad-return-value nil)))
;; Let Emacs auto-load/save sessions.
(when (getenv "EMACS_SERVER")
(desktop-save-mode 1)
(setq history-length 250)
(setq desktop-dirname (concat emacs-cache-folder "desktop"))
(unless (file-directory-p desktop-dirname)
(make-directory desktop-dirname t))
(setq desktop-path `(,desktop-dirname))
(add-to-list 'desktop-locals-to-save 'compile-command))
2014-02-21 20:14:50 +01:00
;; GMP documentation
(eval-after-load "info-look"
'(let ((mode-value (assoc 'c-mode (assoc 'symbol info-lookup-alist))))
(setcar (nthcdr 3 mode-value)
(cons '("(gmp)Function Index" nil "^ -.* " "\\>")
(nth 3 mode-value)))))
2014-02-21 20:14:50 +01:00
(require 'uniquify)
(setq uniquify-buffer-name-style 'forward)
2014-03-13 16:13:21 +01:00
;; Skeleton settings
(require 'functions)
;; Do not expand abbrevs in skeletons.
(setq-default skeleton-further-elements '((abbrev-mode nil)))
(add-hook 'skeleton-end-hook 'skeleton-make-markers)
(define-key mickey-minor-mode-map (kbd "C->") 'skeleton-next-position)
(define-key mickey-minor-mode-map (kbd "C-<") (lambda () (interactive) (skeleton-next-position t)))
2014-03-13 16:13:21 +01:00
;; Alternate focus.
(add-hook 'occur-hook (lambda () (pop-to-buffer occur-buf)))
2014-02-22 19:13:19 +01:00
;; (add-hook 'help-mode-hook (lambda () (pop-to-buffer (get-buffer "*Help*"))))
(add-hook 'grep-mode-hook (lambda () (pop-to-buffer (get-buffer "*grep*"))))
;; Disable prompt (but leave warning) on git symlink.
(setq vc-follow-symlinks t)
;; Clipboard and primary selection.
(setq x-select-enable-clipboard t)
(setq x-select-enable-primary t)
2014-03-31 11:44:14 +02:00
;; Bibtex
(setq bibtex-entry-format '(opts-or-alts required-fields numerical-fields whitespace realign last-comma delimiters braces sort-fields))
(setq bibtex-field-delimiters 'double-quotes)
2015-09-23 14:32:47 +02:00
(add-hook
'bibtex-mode-hook
(lambda ()
(setq indent-tabs-mode nil)))
2014-03-31 11:44:14 +02:00
;; Git commit meessages.
(add-to-list 'auto-mode-alist '("COMMIT_EDITMSG\\'" . conf-mode))
2013-07-09 10:57:02 +02:00
;; Mutt support.
(add-to-list 'auto-mode-alist '("/tmp/mutt.*" . mail-mode))
;; Arch Linux PKGBUILD.
(add-to-list 'auto-mode-alist '("PKGBUILD" . sh-mode))
2013-10-07 20:01:45 +02:00
;; Shell extensions. We do not put 'sh' only because it could get messy. Emacs
;; knows it anyway.
(add-to-list 'auto-mode-alist '("\\(bash\\'\\|zsh\\'\\|csh\\'\\|tcsh\\'\\|ksh\\'\\)" . sh-mode))
(add-to-list 'auto-mode-alist '("rc\\'" . sh-mode))
2013-07-09 10:57:02 +02:00
;; Subtitles support.
(add-to-list 'auto-mode-alist '("\\.srt\\'" . text-mode))
;; Read Matlab files in Octave mode.
(add-to-list 'auto-mode-alist '("\\.m\\'" . octave-mode))
;; Easy code folding toggle.
2016-10-08 05:10:11 +02:00
; (add-hook 'prog-mode-hook 'hs-minor-mode)
; (add-hook 'prog-mode-hook (lambda () (local-set-key (kbd "C-c h") 'hs-toggle-hiding)))
;; Move mouse away.
2015-05-14 16:45:04 +02:00
; (mouse-avoidance-mode 'banish)
;; Display defun in mode line.
(which-function-mode)
;; Replace maximized binding for fullscreen.
(define-key mickey-minor-mode-map (kbd "M-<f10>") 'toggle-frame-fullscreen)
;; Scroll zooming.
(define-key mickey-minor-mode-map (kbd "C-<wheel-down>") 'text-scale-decrease)
(define-key mickey-minor-mode-map (kbd "C-<mouse-5>") 'text-scale-decrease)
(define-key mickey-minor-mode-map (kbd "C-<wheel-up>") 'text-scale-increase)
(define-key mickey-minor-mode-map (kbd "C-<mouse-4>") 'text-scale-increase)
2015-06-02 10:05:14 +02:00
(setq text-scale-mode-step 1.1)
2015-11-02 13:34:04 +01:00
;; Sort
(setq sort-fold-case t)
2016-10-05 06:56:16 +02:00
;; Replace not-so-useful comment-dwim binding.
(define-key mickey-minor-mode-map "\M-;" 'comment-line)
2016-10-06 14:37:53 +02:00
; In case you find eldoc too distracting.
;; (global-eldoc-mode 0)
2014-03-08 11:48:35 +01:00
(provide 'main)
2016-10-14 14:03:30 +02:00
2014-03-08 11:48:35 +01:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2016-10-14 14:03:30 +02:00
;; Old code.
2014-03-08 11:48:35 +01:00
;; This may be needed for gud/pdb.
; (defadvice pop-to-buffer (before cancel-other-window first)
; (ad-set-arg 1 nil))
; (ad-activate 'pop-to-buffer)
;; Use color escape sequences. Only use if needed.
; (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
;; Flymake has a bug that prevents menu from spawning in a console. We redefine
;; the function to spawn the error message in the mini-buffer.
; (defun flymake-display-err-message-for-current-line ()
; "Display a message with errors/warnings for current line if it
; has errors and/or warnings."
; (interactive)
; (let* ((line-no (flymake-current-line-no))
; (line-err-info-list (nth 0 (flymake-find-err-info flymake-err-info line-no)))
; (menu-data (flymake-make-err-menu-data line-no line-err-info-list)))
; (if menu-data
; (let ((messages))
; (push (concat (car menu-data) ":") messages)
; (dolist (error-or-warning (cadr menu-data))
; (push (car error-or-warning) messages))
; (message "%s" (mapconcat #'identity (reverse messages) "\n"))))))
; (define-key mickey-minor-mode-map (kbd "C-<f10>")
; 'flymake-display-err-message-for-current-line)