commit b515255a8f227130b98bc755ff6ecb4469a05d05 Author: Nathan Schneider Date: Mon Aug 5 22:05:27 2019 +0000 Add new file diff --git a/.emacs b/.emacs new file mode 100644 index 0000000..8529ae7 --- /dev/null +++ b/.emacs @@ -0,0 +1,157 @@ +;; 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)) + ) +) + +;; ORG/OX-REVEAL +;; Revealjs presentations in org-mode [[https://github.com/yjwen/org-reveal]] +;; This part was automatically added on install. Don't change: +(custom-set-variables + ;; custom-set-variables 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. + '(package-selected-packages (quote (pandoc-mode ox-reveal)))) +(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. + ) +;; Initialize +(require 'ox-reveal) +(setq org-reveal-root "file:///home/ntnsndr/.revealjs/reveal.js") +;; Customization at ~/.revealjs/conf.org