Files
dotfiles/.emacs
T
2019-08-06 22:09:39 +00:00

137 lines
5.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;; GETTING STARTED
;; INITIALIZE MELPA PACKAGES
;; Keep this on top
;; https://melpa.org/#/getting-started
(require 'package)
(let* ((no-ssl (and (memq system-type '(windows-nt ms-dos))
(not (gnutls-available-p))))
(url (concat (if no-ssl "http" "https") "://melpa.org/packages/")))
(add-to-list 'package-archives (cons "melpa" url) t))
(when (< emacs-major-version 24)
;; For important compatibility libraries like cl-lib
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))
(package-initialize)
;; setting the default directory for extra packages
(add-to-list 'load-path "~/.emacs.d/lisp/")
;; SOME BASIC PREFERENCES
;; turns off the menu at top
(menu-bar-mode -1)
;; enable longlines-mode for text files
(add-hook 'text-mode-hook 'visual-line-mode)
;; load word-count tools, use "wc" command to get instant count
(load "wc-mode")
;; but normally don't initialize because it's too CPU-intensive on large files
;; (add-hook 'text-mode-hook 'wc-mode)
;; enable apsell as default spell checker
(setq-default ispell-program-name "aspell")
;; set window margins
;; (a bit buggy on multiple-window startup, but resolves)
(add-hook 'window-configuration-change-hook
(lambda ()
(set-window-margins (car
(get-buffer-window-list
(current-buffer) nil t)) 2 2)))
;; Set markdown-mode as default for markdown files
;; (can always opt out into text-mode)
(autoload 'markdown-mode "markdown-mode" "Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
;; Turn on Flyspell (no need for lazy-mode, it seems; perhaps delete that)
;;(require 'flyspell-lazy)
;;(flyspell-lazy-mode 1)
(dolist (hook '(text-mode-hook))
(add-hook hook (lambda ()
(flyspell-mode 1)
(set-variable 'flyspell-issue-message-flag nil)
(flyspell-buffer))))
;; 4-space tabs as default
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
;; BACKUP CONTROL
;; source: http://is.gd/ag5KOC
(setq backup-directory-alist '(("." . "~/.emacs.d/backup"))
backup-by-copying t ; Don't delink hardlinks
version-control t ; Use version numbers on backups
delete-old-versions t ; Automatically delete excess backups
kept-new-versions 20 ; how many of the newest versions to keep
kept-old-versions 5 ; and how many of the old
)
;; HORIZONTAL WINDOWS
;; open horizontal windows as default for multiple files
(defun 2-windows-vertical-to-horizontal ()
(let ((buffers (mapcar 'window-buffer (window-list))))
(when (= 2 (length buffers))
(delete-other-windows)
(set-window-buffer (split-window-horizontally) (cadr buffers)))))
(add-hook 'emacs-startup-hook '2-windows-vertical-to-horizontal)
;; DICT
;; For getting definitions of words
(defun dict ()
(interactive)
(let (word)
(setq word (read-string "Define: "))
(shell-command (concat "dict " word))))
;; ASCIIFY
;; replace complex curly quotes with ASCII straight ones
;; replace em-dash with ---
(defun asciify ()
(interactive)
(setq start (point))
(beginning-of-buffer)
(while (search-forward "“" nil t) (replace-match "\"" nil t))
(beginning-of-buffer)
(while (search-forward "”" nil t) (replace-match "\"" nil t))
(beginning-of-buffer)
(while (search-forward "" nil t) (replace-match "\'" nil t))
(beginning-of-buffer)
(while (search-forward "" nil t) (replace-match "\'" nil t))
(beginning-of-buffer)
(while (search-forward "—" nil t) (replace-match "---" nil t))
(goto-char start))
;; PANDOC
;; for converting markdown text in buffer to another format and opening it
;; file-type argument must be a pandoc-recognized file format
;; to specify .csl file for bibliography, use YAML metadata "csl:" command
(defun pandoc ()
(interactive)
(let (file-type file-ext tmp-out-file tmp-out-file out-file current-dir)
(setq file-type (read-string "File type (epub, [html], odt, pdf, slides, etc.): "))
(setq file-ext file-type)
;; set default as html
(when (string-equal file-type "")
(setq file-type "html")
(setq file-ext "html"))
;; set up pdf routine
(when (string-equal file-type "pdf")
(setq file-type "latex --variable fontsize='11pt'"))
;; set up slides revealjs routine
(when (string-equal file-type "slides")
(setq file-ext "html")
;; Light approach, which requires web access and readable code (but speaker notes and relative paths don't work):
;; (setq file-type "revealjs --variable revealjs-url='http://lab.hakim.se/reveal-js' --standalone"))
;; Heavy embedded binary approach (relies on reveal.js/ being in ~/.pandoc/):
(setq file-type "revealjs --self-contained --variable revealjs-url='/home/ntnsndr/.revealjs/reveal.js' -V theme=ntn -V controls=false --slide-level=2"))
;; proceed
(setq tmp-in-file "/tmp/pandoc-in.txt")
(setq tmp-out-file (concat "/tmp/pandoc-out." file-ext))
(write-region nil nil tmp-in-file)
(shell-command (concat
"iconv -t utf-8 " tmp-in-file " | " ;; pipe in utf-8 for pandoc
"pandoc -s" ;; embed full header in HTML
" -f markdown+smart" ;; add curly quotes
" --bibliography /home/ntnsndr/Zotero/lib.bib" ;; connect to BibTeX export from Zotero
" -t " file-type
" -o " tmp-out-file))
;; End convert routine
(shell-command (concat "xdg-open " tmp-out-file))
)
)