-;; Copyright (C) 2019 Ian Kelling
+;; Copyright (C) 2020 Ian Kelling
;; This program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;;; init.el --- the start of customization
-;; (toggle-debug-on-error) ;uncomment to help debug
+(toggle-debug-on-error) ;uncomment to help debug
;; stop from minimizing & freezing the gui
(add-hook 'after-init-hook
`(lambda ()
(setq file-name-handler-alist file-name-handler-alist-old
- gc-cons-threshold 800000
- gc-cons-percentage 0.1)
- (garbage-collect)) t)
+ ;; 100 mb
+ gc-cons-threshold 100000000))
+ ;; taken from wiegley, dunno why the t is there.
+ t)
;; 2019-6-26, 1.26s
;; ; to profile init:
;; ; uncomment the following block
-;; (require 'benchmark-init)
-;; (add-hook 'after-init-hook 'benchmark-init/deactivate)
+(require 'benchmark-init)
+(add-hook 'after-init-hook 'benchmark-init/deactivate)
;; ; Then run:
;; ; emacs -f benchmark-init/show-durations-tabulated
;; ; emacs -f benchmark-init/show-durations-tree
;; Ubiquitous Packages. these could go anywhere actually
-(use-package saveplace
- :unless noninteractive
- :config
- (save-place-mode 1))
+
+;; find file at point
(use-package ffap)
-;; from jwiegley
-(use-package recentf
- :defer 10
- :commands (recentf-mode
- recentf-add-file
- recentf-apply-filename-handlers)
- :config
- (recentf-mode 1))
+
+
(setq package-archives
(quote
;; keep our init.el clean, by moving customization elisp to it's own file
(setq custom-file "~/.emacs.d/custom.el")
-(load custom-file 'noerror)
+;; empty atm
+;;(load custom-file 'noerror)
;;; auto-complete
;; avoid window config hook saving too much, it can
;; get into loops in some random situations
-(setq my-auto-save-last nil)
+(defvar my-auto-save-last nil)
+(defvar my-as nil)
+(defvar my-auto-save-last nil)
(defun my-auto-save-win ()
(unless (eq (current-buffer) my-auto-save-last)
(my-auto-save (current-buffer))))
(defun my-as-on-local (&rest ignore)
(interactive)
- (setq-local my-as on))
+ (setq-local my-as t))
;; based on suggestion in the emacs docs, redefine these 2 functions
;; to avoid prompt spamming the user when we do auto-save
;; assume hard linked files are done on purpose, don't screw them up
backup-by-copying-when-linked t)
+(defvar last-backup-time 0)
;; todo, the time needs to be an integer, not a vector type thing
(defun constant-backup ()
"Backup conditioned on some time passing since last one.
;; lowest bound of functionality is actually about 15 input events
;; (setq auto-save-interval ...)
-;;; c-like settings
-;; change last thing from gnu.
-;; notably this avoids brace indent after if, and 4 space indent
-(setq c-default-style '((java-mode . "java")
- (awk-mode . "awk")
- (other . "stroustrup")))
-;; for emacs itself, use
-;; (setq c-default-style '((java-mode . "java")
-;; (awk-mode . "awk")
-;; (other . "gnu")))
-;; (setq-default c-basic-offset 2)
-
;;; color theme
;; A Theme builder is available at http://elpa.gnu.org/themes/ along with
(while custom-enabled-themes
(disable-theme (car custom-enabled-themes)))
(load-theme arg t))
-(setq color-theme-is-global t)
+
+;; not a real var? remove when I see this again
+;;(setq color-theme-is-global t)
;; temporary, make night be default
;;; cross session settings
-;; Save a list of recent files visited.
-(recentf-mode 1)
-(setq recentf-max-saved-items 400
- recentf-max-menu-items 15)
-
-
-(setq save-place t
- save-place-version-control 'nospecial
- save-place-limit 40000
- save-place-file "~/.emacs.d/places")
-
-
-
-;; savehist keeps track of some history
-;; search entries
-(setq savehist-additional-variables '(kill-ring search-ring regexp-search-ring)
- ;; save every minute
- savehist-autosave-interval 60
- ;; keep the home clean
- savehist-file "~/.emacs.d/.savehist")
-(savehist-mode 1)
-
-
-;;; ediff
-;; ediff-buffers is the main command to use
-
-;; ediff - don't start another frame for the control panel
-;; unfortunately, this doesn't allow me to use 2 frames for the diff buffers
-;; so disable this temporarily with the next line if you want that
-;; sometime I should setup 2 functions to explicitly do each type
-(setq ediff-window-setup-function 'ediff-setup-windows-plain)
-;;(setq ediff-window-setup-function 'ediff-setup-windows-default)
+(use-package recentf
+ ;; defer & commands from jwiegley
+ :defer 10
+ :commands (recentf-mode
+ recentf-add-file
+ recentf-apply-filename-handlers)
+ :config
+ (recentf-mode 1)
+ (setq recentf-max-saved-items 400
+ recentf-max-menu-items 15)
+ )
-;; do side by side diffs
-(setq ediff-split-window-function 'split-window-horizontally)
+(use-package saveplace
+ :unless noninteractive
+ :config
+ (setq
+ save-place-version-control 'nospecial
+ save-place-limit 4000
+ save-place-file "~/.emacs.d/places")
+ (save-place-mode 1))
-;; Things I tried which didn't work, which intuitively I think should
-;; work better: I can open the second diff buffer in a new frame, and
-;; close it's window in the first frame after starting ediff, but when I
-;; hit n to go to the next diff, it restores the window in the first
-;; frame. Another thing I tried is to open 2 new frames and set them up
-;; as I want. However, if I try to open the *Ediff Control Panel* buffer
-;; in a different window from its original one, my mouse jumps to one of
-;; the diff frames, or if that isn't visible, the buffer just hangs
-;; until I select the original ediff control panel window. This seems
-;; like a bug to me. I am using a very recent development version of
-;; emacs.
+;; savehist keeps track of some history search entries
+(use-package savehist
+ :unless noninteractive
+ :config
+ (setq savehist-additional-variables '(kill-ring search-ring regexp-search-ring)
+ ;; save every minute
+ savehist-autosave-interval 60
+ ;; keep the home clean
+ savehist-file "~/.emacs.d/.savehist")
+ (savehist-mode 1))
;;; dired
;; dired - reuse current buffer by pressing 'a'
(put 'dired-find-alternate-file 'disabled nil)
-;;; mu4e
-
-;; alsot tried notmuch, it had some glitches, and it's config has a list
-;; of folders which i'd rather not publish, so it's config is archived.
-
-;;(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu4e")
-;;(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e")
-;; (require 'mu4e)
-
-;; (setq mu4e-headers-results-limit 2000)
-
-
-(defun my-mu4e-init ()
- (setq mu4e-headers-fields (delq (assoc :mailing-list mu4e-headers-fields) mu4e-headers-fields))
- ;; it's implemented in mu4e, but not in the actions list for
- ;; some reason.
- (add-to-list 'mu4e-view-actions
- '("browser view" . mu4e-action-view-in-browser) t)
-
- (add-to-list 'mu4e-headers-actions
- '("from this sender" . mu4e-action-msgs-by-this-sender) t)
- (add-to-list 'mu4e-view-actions
- '("from this sender" . mu4e-action-msgs-by-this-sender) t)
- ;; normally, you would add to this, but we want to
- ;; modify unread messages. the first 4 are defined by default.
- (setq mu4e-bookmarks
- `( ,(make-mu4e-bookmark
- :name "Unread messages"
- ;; old less restrictive unread, for adapting in the future:
- ;; flag:unread AND NOT flag:trashed AND NOT maildir:/Junk AND NOT maildir:/fwfw AND NOT maildir:/log
- :query "flag:unread maildir:/INBOX"
- :key ?u)
- ,(make-mu4e-bookmark
- :name "Today's messages"
- :query "date:today..now"
- :key ?t)
- ,(make-mu4e-bookmark
- :name "Last 7 days"
- :query "date:7d..now"
- :key ?w)
- ,(make-mu4e-bookmark
- :name "Messages with images"
- :query "mime:image/*"
- :key ?p))
- )
- )
-
-(eval-after-load "mu4e" '(my-mu4e-init))
-
-(setq
- ;; https://github.com/djcb/mu/issues/1025
- mail-user-agent 'mu4e-user-agent
- ;; common to gnus. default sendmail-query-once asks us, then sets this via customize.
- send-mail-function (quote sendmail-send-it)
- ;; use the standard imap folders
- mu4e-sent-folder "/Sent"
- mu4e-drafts-folder "/Drafts"
- mu4e-trash-folder "/Trash"
- ;; reindex new mail this often in seconds
- ;; show addresses instead of just names
- mu4e-view-show-addresses t
- mu4e-use-fancy-chars t
- mu4e-confirm-quit nil
- mu4e-headers-leave-behavior 'apply ;; dont ask, do whatever was marked
- ;; default 500.
- mu4e-headers-results-limit 1000
- ;; tell exim to use from: as envelope from.
- ;; exim's default is use outgoing_msg_localpart@hostname.
- mail-specify-envelope-from t
-
- ;; looking up the list of maildirs when doing jo from summary
- ;; can take a few seconds if we have a ton of messages.
- ;; Only take that time for the first lookup.
- ;; if we add a new maildir, just restart mu4e for it to be in that list.
- mu4e-cache-maildir-list t
- ;; default is 8, way too small for my big monitors
- mu4e-headers-visible-lines 50
- message-sendmail-envelope-from 'header
- ;; trying this out
- ;;mu4e-view-use-gnus t
- ;; had problems where mu4e and gnus would hang verifying signatures, gnus man
- ;; said this should help, but it didnt work. they still got verified.
- ;; mm-verify-option 'never
- )
-
-;; fucks up reading unread bookmark. when that is fixed, enable it
-;; (setq mu4e-update-interval 60)
-
-
-;; this file includes setting up my email addresses, which are not public,
-;; including
-;; mu4e-user-mail-address-list
-;; and a function
-;; inspired by mu4e info manual, search for mu4e-compose-pre-hook.
-(when (file-exists-p "/p/c/mymu4e.el")
- (load "/p/c/mymu4e.el"))
-
-(defun my-decrypt ()
- ;; use for decrypting in mu4e
- (interactive)
- (beginning-of-buffer)
- (when (search-forward "-----BEGIN PGP MESSAGE-----" nil t)
- (read-only-mode 0)
- (let ((start (match-beginning 0))
- (end (search-forward "-----END PGP MESSAGE-----" nil t)))
- (shell-command-on-region start end "gpg2 -dq" nil t shell-command-default-error-buffer t)
- )))
-(add-hook 'mu4e-view-mode-hook 'my-decrypt)
-
-(defun iank-set-from-name (regexes)
- "If we find an address matching regex, then set that address as the to,
-and whatever was used"
- (when mu4e-compose-parent-message
- (let ((found nil))
- (while (and regexes (not found))
- (setq re (car regexes)
- regexes (cdr regexes)
- found (mu4e-message-contact-field-matches
- mu4e-compose-parent-message :to re)))
- (when found
- (setq user-full-name (car found))
- ;; we get an error unless we do this. that is a bug. I could
- ;; send a patch... also a bug: setting message-from-style nil
- ;; doesnt work in mu4e unless user-full-name is also nil.
- (unless user-full-name
- (setq message-from-style nil))
- (setq user-mail-address (cdr found)
- mail-signature nil))
- found)))
-(defun iank-set-from (regexes)
- "If we find an address matching regex, then set that address as the to,
-and Ian Kelling as the name"
- (when mu4e-compose-parent-message
- (let ((found nil))
- (while (and regexes (not found))
- (setq re (car regexes)
- sig (cadr regexes)
- regexes (cddr regexes)
- found (cdr (mu4e-message-contact-field-matches
- mu4e-compose-parent-message :to re))))
- (when found (setq user-mail-address found
- user-full-name "Ian Kelling"))
- found)))
-
-
-(defun mu-exit-wait ()
- (interactive)
- ;; taken from the mu source
- (let* ((buf (get-buffer mu4e~proc-name))
- (proc (and (buffer-live-p buf) (get-buffer-process buf))))
- (mu4e-quit)
- ;; without sleep, we get database locked by another process error when hitting u
- ;; if another mu was running.
- (if proc (sleep-for 0 1000))))
-
-(defun fsf-mu4e ()
- (interactive)
- (my-mu4e-commmon)
- (setq
- user-mail-address "iank@fsf.org"
- iank-user-mail-address user-mail-address
- ;; WARNING: be careful editing this, there needs to be a space after --, and my editor
- ;; and git will automatically remove it unless i manually disable it.
- mail-signature fsf-sig
- ) ;; end setq
- (add-hook 'mu4e-compose-pre-hook 'my-mu4e-to)
- (mu4e))
-
-
-
-
-(defun mu4e-action-msgs-by-this-sender (msg)
- "In header view, view messages by the sender of the message under point."
- (let ((from (mu4e-message-field msg :from)))
- (unless from
- (mu4e-error "No from header for this message"))
- ;; from is structured like: (("Anacron" . "root@x2.lan"))
- (mu4e-headers-search (concat "f:" (cdar from)))))
-
-
-
;;; elisp settings
;; when manually evaluating lisp, go into debugger on error
(setq eval-expression-debug-on-error t)
-(eval-after-load "python-mode"
- '(progn
- (define-key python-mode-map (kbd "C-j") nil)))
-
;;; isearch
(setq
isearch-allow-scroll t
;; interactive modes don't need whitespace checks
(defun interactive-lisp-coding-defaults ()
(whitespace-mode -1))
-(setq prelude-interactive-lisp-coding-hook 'prelude-interactive-lisp-coding-defaults)
+;;; modes with little configuration needed
+
+(custom-set-variables
+ '(css-indent-offset 2)
+ '(sh-here-document-word "'EOF'")
+ '(outline-minor-mode-prefix "\ 3\ 1")
+ '(tramp-default-method "ssh")
+ ;; change last thing from gnu.
+ ;; notably this avoids brace indent after if, and 4 space indent
+ ;; for emacs itself, use
+ ;; (setq c-default-style '((java-mode . "java")
+ ;; (awk-mode . "awk")
+ ;; (other . "gnu")))
+ ;; (setq-default c-basic-offset 2)
+ '(c-default-style '((java-mode . "java")
+ (awk-mode . "awk")
+ (other . "stroustrup")))
+ )
-;; ielm is an interactive Emacs Lisp shell
-(defun ielm-mode-defaults ()
- (run-hooks 'prelude-interactive-lisp-coding-hook)
- (turn-on-eldoc-mode))
-(add-hook 'ielm-mode-hook 'ielm-mode-defaults)
-;;; modes with little configuration needed
+(setq
+ ;; ediff-buffers is the main command to use
+ ;; don't start another frame for the control panel
+ ;; unfortunately, this doesn't allow me to use 2 frames for the diff buffers
+ ;; so disable this temporarily with the next line if you want that
+ ;; sometime I should setup 2 functions to explicitly do each type
+ ediff-window-setup-function 'ediff-setup-windows-plain
+ ;;(setq ediff-window-setup-function 'ediff-setup-windows-default)
+ ;; do side by side diffs
+ ediff-split-window-function 'split-window-horizontally
+ ;; ediff things I tried which didn't work, which intuitively I think should
+ ;; work better: I can open the second diff buffer in a new frame, and
+ ;; close it's window in the first frame after starting ediff, but when I
+ ;; hit n to go to the next diff, it restores the window in the first
+ ;; frame. Another thing I tried is to open 2 new frames and set them up
+ ;; as I want. However, if I try to open the *Ediff Control Panel* buffer
+ ;; in a different window from its original one, my mouse jumps to one of
+ ;; the diff frames, or if that isn't visible, the buffer just hangs
+ ;; until I select the original ediff control panel window. This seems
+ ;; like a bug to me. I am using a very recent development version of
+ ;; emacs.
-;; disabled temporarily
+ )
+
+;; disabled temporarily. todo, look into it
;;(add-hook 'outline-minor-mode-hook 'outshine-mode)
-(setq css-indent-offset 2)
+
+
+;; this file includes setting up my email addresses, which are not public,
+;; including
+;; mu4e-user-mail-address-list
+;; and a function
+;; inspired by mu4e info manual, search for mu4e-compose-pre-hook.
+(when (file-exists-p "/p/c/mymu4e.el")
+ (load "/p/c/mymu4e.el"))
+
(when (file-exists-p "/a/h/iank-mod.el")
(load-file "/a/h/iank-mod.el"))
(ws-butler-global-mode)
-
-
-(require 'nginx-mode)
+;; disabled because i dont edit nginx files enough
+;; to have this loaded at startup
+;;(use-package nginx-mode)
;;The mode should automatically activate for files called nginx.conf and files under /etc/nginx - if not, you can add something like this to your init file:
;;(add-to-list 'auto-mode-alist '("/etc/nginx/sites-available/.*" . nginx-mode))
;; todo, put this on a hook with prog mode
;;(highlight-indentation-mode 1)
-(add-hook 'auto-revert-tail-mode-hook
- (lambda ()
- (when (string=
- buffer-file-name
- "/var/log/cloudman/development/cm-service.log")
- (setq-local prev-auto-revert-max 0)
- ;; set buffer-local hook
- (add-hook 'after-revert-hook 'tail-colorize nil t))))
-(defun tail-colorize ()
- (ansi-color-apply-on-region prev-auto-revert-max (point-max))
- (setq-local prev-auto-revert-max (point-max)))
-
-
-;; message mode prompted me on first message.
-;; a function which describes options then sets this
-;; the other options were to use smtp directly or pass to another mail client
-;; here we use the standard sendmail interface, which I use postfix for
-(setq send-mail-function (quote sendmail-send-it))
+
+;; example of a syntax highlighted tail
+(use-package autorevert
+ :defer t
+ :config
+ (defvar prev-auto-revert-max)
+ (defun tail-colorize ()
+ (ansi-color-apply-on-region prev-auto-revert-max (point-max))
+ (setq-local prev-auto-revert-max (point-max)))
+ (add-hook 'auto-revert-tail-mode-hook
+ (lambda ()
+ (when (string=
+ buffer-file-name
+ "/var/log/cloudman/development/cm-service.log")
+ (setq-local prev-auto-revert-max 0)
+ ;; set buffer-local hook
+ (add-hook 'after-revert-hook 'tail-colorize nil t))))
+ )
;; delete active selection with self-insert commands
(delete-selection-mode t)
;; Transparently open compressed files
(auto-compression-mode t)
-;; not documented, but looking at the source, I find this
-;; stops me from being asked what command on every C-c-c
-;; when doing a latex document.
-(setq TeX-command-force "LaTeX")
-
;; dot mode, repeats last action
(require 'dot-mode)
-(add-hook 'find-file-hooks 'dot-mode-on)
+(add-hook 'find-file-hook 'dot-mode-on)
;; clean up obsolete buffers automatically at midnight
(require 'midnight)
;; show the name of the current function definition in the modeline
-;;(require 'which-func)
(setq which-func-modes t)
(which-function-mode 1)
;;(add-hook 'text-mode-hook 'turn-on-auto-fill)
(add-hook 'text-mode-hook 'turn-on-flyspell)
-
-;; auto indent shell script comments
-(setq sh-indent-comment t)
-
;; random extra highlights
(require 'volatile-highlights)
(volatile-highlights-mode t)
(add-hook 'info-mode-hook 'my-info-init)
-(setq sh-here-document-word "'EOF'")
-
-(setq tramp-default-method "ssh")
;;; misc general settings
+
+;; I tried to look for a function that would set this that is
+;; not part of the emacs interactive customize stuff, but didn't see one
+;; in the faces documentation.
+
+(custom-set-faces
+ ;; custom-set-faces was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(header-line ((t (:background "default" :foreground "default" :overline nil :underline nil))))
+ '(region ((t nil))))
+
+
;; from tramp manual, use the same ssh controlmaster. I was having problems with
;; tramp prompting me for a username and pass.
(customize-set-variable 'tramp-use-ssh-controlmaster-options nil)
ring-bell-function 'ignore
case-replace nil
revert-without-query '(".*")
- ;; don't pause display code on input.
- ;; smoother display performance at slight cost of input performance
- redisplay-dont-pause t
font-lock-maximum-decoration t) ; probably default and not necesary
(defun fill-buffer ()
(interactive)
(save-mark-and-excursion
- (beginning-of-buffer)
+ (goto-char (point-min))
(while (= (forward-line) 0)
(fill-paragraph))))
;; make window title be the buffer name
(setq frame-title-format "%b")
-;; -----------------------------
-;; fixing up the mode line
-;; modified from mastering emacs blog
-;; ----------------------------
-
-(defvar mode-line-cleaner-alist
- `((auto-complete-mode . "")
- (yas/minor-mode . "")
- (paredit-mode . "")
- (auto-fill-function . "")
- (eldoc-mode . "")
- (abbrev-mode . "")
- (flyspell-mode . "")
- (glasses-mode . "")
- (dot-mode . "")
- (yas-global-mode . "")
- (yas-minor-mode . "")
- (undo-tree-mode . "")
- (volatile-highlights-mode . "")
- (highlight-symbol-mode . "")
- ;; Major modes
- (lisp-interaction-mode . "λ")
- (hi-lock-mode . "")
- (python-mode . "Py")
- (emacs-lisp-mode . "EL")
- (nxhtml-mode . "nx"))
- "Alist for `clean-mode-line'.
-
- When you add a new element to the alist, keep in mind that you
- must pass the correct minor/major mode symbol and a string you
- want to use in the modeline *in lieu of* the original.")
-
-
-(defun clean-mode-line ()
- (interactive)
- (loop for cleaner in mode-line-cleaner-alist
- do (let* ((mode (car cleaner))
- (mode-str (cdr cleaner))
- (old-mode-str (cdr (assq mode minor-mode-alist))))
- (when old-mode-str
- (setcar old-mode-str mode-str))
- ;; major mode
- (when (eq mode major-mode)
- (setq mode-name mode-str)))))
-
- ; disabled
- ; (add-hook 'after-change-major-mode-hook 'clean-mode-line)
-
-
-;; alias the new `flymake-report-status-slim' to
-;; `flymake-report-status'
-(defalias 'flymake-report-status 'flymake-report-status-slim)
-(defun flymake-report-status-slim (e-w &optional status)
- "Show \"slim\" flymake status in mode line."
- (when e-w
- (setq flymake-mode-line-e-w e-w))
- (when status
- (setq flymake-mode-line-status status))
- (let* ((mode-line " Φ"))
- (when (> (length flymake-mode-line-e-w) 0)
- (setq mode-line (concat mode-line ":" flymake-mode-line-e-w)))
- (setq mode-line (concat mode-line flymake-mode-line-status))
- (setq flymake-mode-line mode-line)
- (force-mode-line-update)))
-
-
(defun my-after-change-major-mode-hook ()
(setq mode-line-mule-info nil
minor-mode-alist nil
(variable-pitch-mode 0))
(add-hook 'yaml-mode-hook 'variable-pitch-off)
-(eval-after-load "org" '(my-org-face-init))
(defun my-org-face-init()
(set-face-attribute 'org-table nil :family (face-attribute 'fixed-pitch :family))
(set-face-attribute 'org-date nil :family (face-attribute 'fixed-pitch :family))
)
+(eval-after-load "org" '(my-org-face-init))
+
(defun remove-org-binds ()
(define-key org-mode-map (kbd "<M-return>") nil)
(define-key org-mode-map (kbd "C-'") nil)
;; this says do autofilling using newcomment.el. The "only" is a misnomer.
(set (make-local-variable 'comment-auto-fill-only-comments) t)
(column-number-mode t)
- (turn-on-smartparens-mode)
+ ;; trying without
+ ;; (turn-on-smartparens-mode)
;; prettify lambdas
(font-lock-add-keywords
(shell)))
(add-hook 'shell-mode-hook 'track-shell-directory/procfs)
-;;; smartparens
-;; the melpa git version had a catastrophic bug I reported.
-;; downgraded to marmalade version and everything is working fine.
-(require 'smartparens-config)
-(show-smartparens-global-mode t)
-
-
-(defun gp/sp/pair-on-newline-and-indent (id action context)
- "Open a new brace or bracket expression, with relevant newlines and indent. "
- (save-excursion
- (newline)
- (indent-according-to-mode))
- (indent-according-to-mode))
-
-;; when opening a pair, and then inserting a newline, push the closing pair to another newline
-(sp-pair "{" nil :post-handlers
- '(:add ((lambda (id action context)
- (gp/sp/pair-on-newline-and-indent id action context)) (kbd "RET"))))
-(sp-pair "[" nil :post-handlers
- '(:add ((lambda (id action context)
- (gp/sp/pair-on-newline-and-indent id action context)) (kbd "RET"))))
-
-
-;; in my version, this is not a pairing.
-;; not sure if it is in a future version since I reverted to marmalade
-;; Don't need c-comments in strings -- they frustrate filename globs
-;; (sp-pair "/*" nil :unless '(sp-in-string-p))
-
-;; Don't need quotes to pair next to words
-(sp-pair "\"" nil :unless '(sp-point-before-word-p sp-point-after-word-p))
-(sp-pair "'" nil :unless '(sp-point-before-word-p sp-point-after-word-p))
-
-
-;; todo, testout these mode specific settings from graphene.
-;; Ruby-specific pairs and handlers
-
-(eval-after-load "ruby"
- '(require 'smartparens-ruby))
-
-;; Markdown
-(sp-local-pair '(markdown-mode gfm-mode) "*" "*"
- :unless '(sp-in-string-p)
- :actions '(insert wrap))
-
-;; Except in HTML
-(sp-local-pair 'html-mode "\"" nil :unless '(:rem sp-point-after-word-p))
-
-
-
-
;;; spell correction
(setq
ispell-program-name "hunspell"
ispell-silently-savep t) ; don't prompt to save personal dictionary
-(require 'rw-hunspell)
+(use-package rw-hunspell
+ :defer t)
;; rw-hunspell sets up hunspell dictionary automagically.
;;; tex
-(setq-default TeX-PDF-mode t) ; use pdf
-
- ; more sensible defaults based on info manual quickstart
-(setq TeX-auto-save t)
-(setq TeX-parse-self t)
-
+(use-package latex-mode
+ :no-require t
+ :config
+ (setq-default TeX-PDF-mode t) ; use pdf
+ ;; more sensible defaults based on info manual quickstart
+ (setq TeX-auto-save t
+ TeX-parse-self t
+ ;; not documented, but looking at the source, I find this
+ ;; stops me from being asked what command on every C-c-c
+ ;; when doing a latex document.
+ TeX-command-force "LaTeX"
+ ))
;;; visible mark mode
;; since it is not easy to change the mark overlay priority, I change this one.
(setq show-paren-priority 999)
-
(defface visible-mark-active
'((((type tty) (class mono)))
(t (:background "magenta"))) "")
-
-
(defface mouse-cursor-face
'((((type tty) (class mono)))
(t (:background "DeepPink1"))) "")
(require 'visible-mark)
-(setq visible-mark-faces '(visible-mark-face1 visible-mark-face2))
-(setq visible-mark-forward-faces '(visible-mark-forward-face1))
-
-
- ; highlight the last 2 marks
-(setq visible-mark-max 2)
- ; highlight 1 forward mark
-(setq visible-mark-forward-max 1)
- ; globally activate visible-mark-mode
+(setq
+ visible-mark-faces '(visible-mark-face1 visible-mark-face2)
+ visible-mark-forward-faces '(visible-mark-forward-face1)
+ ;; highlight the last 2 marks
+ visible-mark-max 2
+ ;; highlight 1 forward mark
+ visible-mark-forward-max 1)
+;; globally activate visible-mark-mode
(global-visible-mark-mode +1)
;; if I could define overlay faces to use inverse foreground color
-;;; znc
-
-(setq erc-fill-prefix "")
+;;; znc/erc
(defun chirp()
(interactive)
(setq vol 50)
;; We must return nil. See help for `erc-server-PRIVMSG-functions'
nil)))
-(add-hook 'erc-server-PRIVMSG-functions
- 'erc-my-privmsg-sound)
-
(defun erc-sound-if-not-server (match-type nickuserhost msg)
(unless (string-match "Server:[0-9]+" nickuserhost)
(chirp)))
-(add-hook 'erc-text-matched-hook 'erc-sound-if-not-server)
-
-(eval-after-load "erc"
- '(erc-track-mode 1))
-(setq
- ;; consider invisible frames to be unseen. seems like an obvious default
- erc-track-visibility 'visible
- ;; switch to buffer where i've been mentioned, etc instead of oldest
- erc-track-switch-direction 'importance
- ;; defaults minus fill. todo: modify the list instead of specifying it explicitly in case the defaults change
- erc-modules
- '(autojoin button completion irccontrols list match menu move-to-prompt netsplit networks noncommands readonly ring stamp track)
- )
-
+(use-package erc
+ :defer t
+ :init
+ (setq erc-fill-prefix ""
+ ;; consider invisible frames to be unseen. seems like an obvious default
+ erc-track-visibility 'visible
+ ;; switch to buffer where i've been mentioned, etc instead of oldest
+ erc-track-switch-direction 'importance
+ ;; defaults minus fill. todo: modify the list instead of specifying it explicitly in case the defaults change
+ erc-modules
+ '(autojoin button completion irccontrols list match menu move-to-prompt netsplit networks noncommands readonly ring stamp track)
+ ) ; end setq
+ :config
+ (add-hook 'erc-server-PRIVMSG-functions
+ 'erc-my-privmsg-sound)
+ (add-hook 'erc-text-matched-hook 'erc-sound-if-not-server)
+ (erc-track-mode 1))
;;; named commands
(defun rm-file-and-buffer ()
"Removes file connected to current buffer and kills buffer."
;; note, this has weird errors when it was before recentf-mode
-;; more resilient undo-tree-history if we have its location set up front.
-(setq undo-tree-history-directory-alist '(("." . "~/.undo-tree-history")))
-
-
-;; todo, send patch undo-tree-visualize should scroll with the scroll key, instead of just pgup pgdn (aka next/prior)
-(global-undo-tree-mode)
-;; disabled due to bug, something like unknown entry in undo tree canary
-;; (setq undo-tree-auto-save-history t)
-(setq undo-outer-limit 100000000 ; per undo command
- undo-limit 500000000 ; undo history limit
- undo-strong-limit 600000000) ; undo history limit plus some extra
-;; Undo in region just happens accidentally, and throws me off
-(setq undo-tree-enable-undo-in-region nil)
+(use-package undo-tree
+ :config
+ ;; more resilient undo-tree-history if we have its location set up front.
+ (setq undo-tree-history-directory-alist '(("." . "~/.undo-tree-history"))
+ undo-outer-limit 100000000 ; per undo command
+ undo-limit 500000000 ; undo history limit
+ undo-strong-limit 600000000 ; undo history limit plus some extra
+ ;; Undo in region just happens accidentally, and throws me off
+ undo-tree-enable-undo-in-region nil)
+ ;; disabled due to bug, something like unknown entry in undo tree canary
+ ;; (setq undo-tree-auto-save-history t)
+
+ ;; todo, send patch undo-tree-visualize should scroll with the scroll key, instead of just pgup pgdn (aka next/prior)
+ (global-undo-tree-mode)
+ ;; simple way to fix that enable undo-tree starts out disabled in org-mode
+ (defun undo-tree-overridden-undo-bindings-p() nil))
;;; keybinds
(add-hook 'org-mode-hook
(lambda ()
(define-key org-mode-map (kbd "<S-right>") nil)))
-;;;;; esc
+;;;;; esc --- terminal dup
;; todo, test out if this can be used
;;;;; return - new line
(global-set-key (kbd "M-g") 'abort-recursive-edit)
-;;;;; C-M-g - gnus
+;;;;; C-M-g - mu4e
(global-set-key (kbd "C-M-g") 'mu4e)