Skip to content

Instantly share code, notes, and snippets.

@joshuafcole
Created June 9, 2019 08:34
Show Gist options
  • Save joshuafcole/43ab51f01ca77002678d7e3127dcf326 to your computer and use it in GitHub Desktop.
Save joshuafcole/43ab51f01ca77002678d7e3127dcf326 to your computer and use it in GitHub Desktop.
.emacs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; use-package setup
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/") t)
(package-initialize)
;; Setup use-package to manage dependencies.
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(eval-when-compile
(require 'use-package))
(use-package diminish :ensure t)
(use-package bind-key :ensure t)
(require 'diminish)
(require 'bind-key)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Customize Variables & Faces
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(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.
'(bmkp-last-as-first-bookmark-file "~/.emacs.d/bookmarks")
'(cider-annotate-completion-candidates t t)
'(cider-boot-parameters "cider.tasks/nrepl-server -b localhost wait" t)
'(cider-debug-display-locals t t)
'(cider-repl-use-pretty-printing t t)
'(company-auto-complete-chars (quote (41 46)))
'(company-idle-delay 0.2)
'(company-minimum-prefix-length 3)
'(company-quickhelp-color-background "#404040")
'(company-quickhelp-color-foreground "white")
'(company-quickhelp-delay 0.2)
'(company-quickhelp-mode t)
'(company-quickhelp-use-propertized-text t)
'(company-selection-wrap-around t)
'(company-show-numbers t)
'(company-tooltip-align-annotations t)
'(company-tooltip-maximum-width 100)
'(custom-safe-themes
(quote
("dcbe22bc74153257f412183dd14ab9652197f59adf65646e618c2577e7cca34d" "38ba6a938d67a452aeb1dada9d7cdeca4d9f18114e9fc8ed2b972573138d4664" "71ecffba18621354a1be303687f33b84788e13f40141580fa81e7840752d31bf" "561ba4316ba42fe75bc07a907647caa55fc883749ee4f8f280a29516525fc9e8" default)))
'(highline-priority 1)
'(js-indent-level 2)
'(lsp-auto-guess-root t)
'(lsp-rust-clippy-preference "on")
'(lsp-rust-unstable-features t)
'(lsp-ui-doc-border "#404040")
'(lsp-ui-doc-header t)
'(lsp-ui-doc-use-webkit nil nil nil "Customized with use-package lsp-ui")
'(lsp-ui-flycheck-enable t)
'(lsp-ui-peek-always-show t)
'(lsp-ui-peek-enable t)
'(lsp-ui-peek-fontify (quote on-demand))
'(lsp-ui-sideline-delay 0.5)
'(lsp-ui-sideline-ignore-duplicates t t)
'(markdown-command "marked")
'(markdown-preview-style
"https://cdn.rawgit.com/joshuafcole/github-markdown-css/0694d90c73626ebf066307d6d58d0359c9cd992f/github-markdown.css" t)
'(package-selected-packages
(quote
(diff-hl diff-hl-mode cyberpunk-2019-theme company-web typescript-mode clojure-mode flycheck rainbow-delimiters company-quickhelp ido-completing-read+ dap-rust dap-mode company-lsp lsp-ui lsp-mode ess ess-R-data-view flycheck-julia julia-repl julia-shell julia-mode yasnippet prettier prettier-js auto-sudoedit ibuffer-tramp tramp-term flycheck-kotlin kotlin-mode cider cider-eval-sexp-fu default-text-scale company-glsl glsl-mode protobuf-mode mocha json-mode json-navigator company-flow flow-minor-mode sws-mode stylus-mode rainbow-mode powershell yaml-mode web-mode flycheck-package package-lint poly-mode polymode use-package pcre2el cargo flycheck-rust rust-mode multiple-cursors ham-mode markdown-mode+ cyberpunk-theme leuven-theme tide smex paredit nixos-options nix-mode magit ido-ubiquitous highline company better-defaults)))
'(rainbow-delimiters-max-face-count 4)
'(safe-local-variable-values
(quote
((org-emphasis-alist
("*" bold)
("/" italic)
("_" underline)
("=" org-verbatim verbatim)
("~" org-code verbatim))
(org-emphasis-alist
("*" bold)
("/" italic)
("_" underline)
("=" org-verbatim verbatim)
("~" org-code verbatim)
("+"
(:strike-through nil))))))
'(typescript-indent-level 2))
(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.
'(border ((t (:background "#202020"))))
'(company-preview ((t (:background "black" :foreground "#8899aa" :box (:line-width 1 :color "#88ccff")))))
'(company-preview-common ((t (:background "black" :foreground "#8899aa"))))
'(company-scrollbar-bg ((t (:background "black"))))
'(company-scrollbar-fg ((t (:background "gray"))))
'(company-tooltip ((t (:background "#303030" :foreground "white"))))
'(company-tooltip-annotation ((t (:inherit company-tooltip :foreground "#aabbcc"))))
'(company-tooltip-annotation-selection ((t (:inherit company-tooltip-annotation :background "#404040"))))
'(company-tooltip-common ((t (:inherit company-tooltip :foreground "#66eeff"))))
'(company-tooltip-common-selection ((t (:inherit company-tooltip-selection :foreground "#44eeff"))))
'(company-tooltip-selection ((t (:inherit company-tooltip :background "#404040" :foreground "white"))))
'(flycheck-warning ((t (:underline (:color "orange" :style wave)))))
'(flymake-error ((t (:background "#200000" :foreground "#ffdddd" :underline nil :weight normal))))
'(flymake-warning ((t (:background "#202000" :foreground "#fff9bb" :underline nil :weight normal))))
'(fringe ((t (:background "#202020" :foreground "#dcdccc"))))
'(highlight-blocks-depth-1-face ((t (:background "#080808"))))
'(highlight-blocks-depth-2-face ((t (:background "#121212"))))
'(highline-face ((t (:background "#1a1a1a"))))
'(line-number ((t (:inherit (shadow default) :background "#292929"))))
'(line-number-current-line ((t (:inherit line-number :foreground "#88ccff"))))
'(link ((t (:foreground "#00ddee" :underline t :weight bold))))
'(lsp-ui-doc-header ((t (:background "#404040" :foreground "white" :weight semi-bold))))
'(lsp-ui-sideline-code-action ((t (:foreground "#00ddee"))))
'(markdown-code-face ((t (:inherit consolas))))
'(rainbow-delimiters-depth-1-face ((t (:foreground "#00b8f1"))))
'(rainbow-delimiters-depth-2-face ((t (:foreground "#6b67ad"))))
'(rainbow-delimiters-depth-3-face ((t (:foreground "#009ee0"))))
'(rainbow-delimiters-depth-4-face ((t (:foreground "#5b59a4"))))
'(region ((t (:background "#203039")))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Basic configuration
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;(set-face-attribute 'default nil :family "Source Code Pro for Powerline")
(set-face-attribute 'default nil :family "Iosevka Term")
(set-fontset-font t 'unicode "Ubuntu" nil 'prepend)
(prefer-coding-system 'utf-8)
(setq coding-system-for-read 'utf-8)
(setq coding-system-for-write 'utf-8)
(delete-selection-mode) ; Overwrite selection on paste
(setq x-select-enable-clipboard t) ; Clipboard integration
(setq yank-pop-change-selection t) ; Clipboard integration
(xterm-mouse-mode t) ; Enable mouse
(setq time-stamp-pattern nil)
(setq time-stamp-time-zone "PST")
(setq column-number-mode t)
(if (fboundp 'global-display-line-numbers-mode)
(global-display-line-numbers-mode 1)
(global-linum-mode t))
(desktop-save-mode t)
;; OS X Bug Fixes
(setq visible-bell nil)
(add-hook 'before-save-hook 'whitespace-cleanup)
;; @TODO: Switch to creating a map.
(require 'subword)
(global-set-key (kbd "M-f") 'subword-forward)
(global-set-key (kbd "M-b") 'subword-backward)
(global-set-key (kbd "M-<left>") 'subword-left)
(global-set-key (kbd "M-<right>") 'subword-right)
(global-set-key (kbd "C-S-f") 'forward-word)
(global-set-key (kbd "C-S-b") 'backward-word)
(global-set-key (kbd "C-S-<left>") 'left-word)
(global-set-key (kbd "C-S-<right>") 'right-word)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Theme
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun select-color-scheme (scheme)
(let ((chrome-background (if (equal scheme "light") "#ececec" "#2c2c2c"))
(theme (if (equal scheme "light") 'leuven 'cyberpunk)))
;; (set-face-background 'highline-face chrome-background)
;; (set-face-background 'linum chrome-background)
;; (set-face-background 'fringe chrome-background)
(load-theme theme t)))
(add-hook 'after-init-hook
(lambda () (select-color-scheme "dark")))
;; (select-color-scheme "light")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; iBuffer
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(eval-after-load "ibuf-ext"
'(define-ibuffer-filter filename
"Toggle current view to buffers with file or directory name matching QUALIFIER."
(:description "filename"
:reader (read-from-minibuffer "Filter by file/directory name (regexp): "))
(ibuffer-awhen (or (buffer-local-value 'buffer-file-name buf)
(buffer-local-value 'dired-directory buf))
(string-match qualifier it))))
(setq ibuffer-saved-filter-groups
'(("default"
("mmi" (filename . ".*/repos/rai/mmi-.*"))
("rai" (filename . ".*/repos/rai/.*"))
("flux" (filename . ".*/repos/personal/flux/.*"))
("external" (filename . ".*/repos/external/.*"))
("emacs" (or
(name . "^\\*scratch\\*$")
(name . "^\\*Messages\\*$")
(name . "^\\*Help\\*$")
(name . "^\\.emacs$")))
("system" (or
(filename . "^/home/josh/scripts/.*$")
(filename . "^/home/josh/.zshrc$")
(filename . "^/home/josh/.config/.*$")))
("meta" (name . "^\\*.*$")))))
(add-hook 'ibuffer-mode-hook
(lambda ()
(ibuffer-switch-to-saved-filter-groups "default")))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; General
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(use-package auto-sudoedit :ensure t)
(use-package better-defaults :ensure t)
(use-package ido-completing-read+ :ensure t
:init
(ido-mode 1)
(ido-everywhere 1)
(ido-ubiquitous-mode 1))
(use-package smex :ensure t
:config
(smex-initialize)
:bind (("M-x" . smex)
("M-X" . smex-major-mode-commands)))
(use-package highline :ensure t
:init
(global-highline-mode t)
:custom
(highline-priority 1))
(use-package multiple-cursors :ensure t
:bind (("C-S-SPC" . mc/edit-lines)
("C-M-." . mc/mark-next-like-this)
([next] . mc/mark-next-like-this)
("C-M-," . mc/mark-previous-like-this)
([prior] . mc/mark-previous-like-this)))
(require 'tramp)
(setq tramp-default-method "ssh")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Prog Mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(add-hook 'prog-mode-hook
(lambda ()
(setq indent-tabs-mode nil)
(rainbow-delimiters-mode +1)
(show-paren-mode +1)
(eldoc-mode +1)
(company-mode +1)
(company-quickhelp-mode +1)
(diff-hl-mode +1)
(diff-hl-flydiff-mode +1)))
(use-package company :ensure t
:bind (("M-TAB" . company-complete-common-or-cycle))
:custom
(company-selection-wrap-around t)
(company-show-numbers t)
(company-idle-delay 0.2)
(company-minimum-prefix-length 2)
(company-tooltip-maximum-width 120)
(company-tooltip-align-annotations t)
(company-auto-complete-chars (quote (41 46))))
(use-package company-quickhelp :ensure t
:custom
(company-quickhelp-delay 0.2)
(company-quickhelp-mode t))
(use-package rainbow-delimiters :ensure t
:commands rainbow-delimiters-mode
:custom
(rainbow-delimiters-max-face-count 4))
(use-package flycheck :ensure t
:init
(setq flycheck-check-syntax-automatically '(save mode-enabled))
(add-to-list 'display-buffer-alist
`(,(rx bos "*Flycheck errors*" eos)
(display-buffer-reuse-window
display-buffer-in-side-window)
(side . bottom)
(reusable-frames . visible)
(window-height . 0.10))))
(use-package yasnippet :ensure t
:init
(yas-global-mode +1))
(use-package rainbow-mode :ensure t
:hook
((css-mode . rainbow-mode)
(stylus-mode . rainbow-mode)))
(use-package lsp-mode :ensure t
:hook (rust-mode . lsp)
:bind (:map lsp-mode-map
("C-c r" . lsp-rename))
:custom
(lsp-auto-guess-root t))
(use-package lsp-ui :ensure t
:commands lsp-ui-mode
:hook (lsp-mode-hook . lsp-ui-mode)
:bind
(:map lsp-mode-map
("M-?" . lsp-ui-peek-find-references)
("M-." . lsp-ui-peek-find-definitions)
("M->" . lsp-ui-peek-find-implementation)
("C-c m" . lsp-ui-imenu)
("C-c s" . lsp-ui-sideline-mode))
:custom
;; flycheck
(lsp-ui-flycheck-enable t)
;; sideline
(lsp-ui-sideline-delay 0.5)
(lsp-ui-sideline-ignore-duplicates t)
;; doc
; (lsp-ui-doc-header t)
;(lsp-ui-doc-use-webkit nil)
;; peek
(lsp-ui-peek-enable t)
(lsp-ui-peek-fontify 'on-demand)
; (lsp-ui-doc-use-webkit t)
)
(use-package company-lsp :commands company-lsp :ensure t
:init
(message "setup company-lsp")
(push 'company-lsp company-backends))
(use-package dap-mode :ensure t)
(use-package diff-hl :ensure t
:commands (diff-hl-mode global-diff-hl-mode diff-hl-flydiff-mode))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Languages
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;━━━━━━━┫ C/++ ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(setq-default c-basic-offset 4)
;;━━━━━━━┫ Clojure ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(use-package clojure-mode :ensure t
:mode ("\\.clj\\'" . clojure-mode))
(use-package cider :ensure t
:hook (clojure-mode . cider-mode)
:bind
(:map cider-mode-map
("C-/" . cider-doc)
("C-?" . cider-grimoire)
("C-." . cider-find-var)
("C-," . cider-pop-back))
:custom
(cider-annotate-completion-candidates t)
(cider-boot-parameters "cider.tasks/nrepl-server -b localhost wait")
(cider-debug-display-locals t)
(cider-repl-use-pretty-printing t)
:config
(setq cider-cljs-lein-repl
"(do (require 'figwheel-sidecar.repl-api)
(figwheel-sidecar.repl-api/start-figwheel!)
(figwheel-sidecar.repl-api/cljs-repl))"))
(use-package cider-eval-sexp-fu :ensure t :defer 10)
;;━━━━━━━┫ GLSL ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(use-package glsl-mode :ensure t
:mode ("\\.glsl\\'" . glsl-mode))
(use-package company-glsl :ensure t :defer 10)
;;━━━━━━━┫ Javascript / Typescript ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(use-package js
:custom
(js-indent-level 2))
(use-package typescript-mode :ensure t
:mode ("\\.ts\\'" . typescript-mode)
:bind (("C-<tab>" . indent-relative))
:custom
(typescript-indent-level 2))
(use-package tide :ensure t
:after (typescript-mode company flycheck)
:hook ((typescript-mode . tide-setup)
(typescript-mode . tide-hl-identifier-mode)
(before-save . tide-format-before-save)))
(use-package prettier-js :ensure t
:commands 'prettier-js-mode
:hook ((typescript-mode . prettier-js-mode)
(javascript-mode . prettier-js-mode)))
(use-package web-mode :ensure t
:mode ("\\.tsx\\'" . web-mode)
:init
(flycheck-add-mode 'typescript-tslint 'web-mode)
(add-hook 'web-mode-hook
(lambda ()
(setq web-mode-markup-indent-offset 2)
(setq web-mode-css-indent-offset 2)
(setq web-mode-code-indent-offset 2)
(when (string-equal "tsx" (file-name-extension buffer-file-name))
(setq web-mode-enable-auto-quoting nil)
(flycheck-add-next-checker 'typescript-tide '(t . typescript-tslint) 'append)))))
(use-package company-web :ensure t)
(use-package json-mode :ensure t
:mode ("\\.json\\'" . json-mode))
(use-package json-navigator :ensure t)
;;━━━━━━━┫ Julia ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(use-package julia-mode :ensure t
:mode ("\\.jl\'" . julia-mode)
:commands julia-mode)
(use-package flycheck-julia :ensure t
:after (flycheck julia-mode)
:hook (flycheck-mode-hook . flycheck-julia-setup))
;;━━━━━━━┫ Markdown ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(use-package markdown-mode+ :ensure t
:hook ((gfm-mode-hook markdown-mode-hook) . setup-md-mode)
:custom
(markdown-command "marked")
(markdown-preview-style
"https://cdn.rawgit.com/joshuafcole/github-markdown-css/0694d90c73626ebf066307d6d58d0359c9cd992f/github-markdown.css")
:init
(defun setup-md-mode ()
(toggle-word-wrap t)
(local-set-key (kbd "M-<right>") 'right-word)
(local-set-key (kbd "M-<left>") 'left-word)
(set (make-local-variable 'time-stamp-pattern) "-8/^date: %04Y-%02m-%02d %02H:%02M:%02S %:Z$")
(add-hook 'before-save-hook 'time-stamp)))
;; (put 'narrow-to-region 'disabled nil)
;;━━━━━━━┫ Nix ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(use-package nix-mode :defer t)
(use-package nixos-options :defer t)
;;━━━━━━━┫ Polymode ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(use-package polymode :ensure t
:init
(setq polymode-buffers-regexp "^.*\\[.*\\]$")
(add-to-list 'ido-ignore-buffers polymode-buffers-regexp)
(when window-system
(setq desktop-restore-forces-onscreen nil)
(setq desktop-buffers-not-to-save (concat "\\(?:\\` \\)" "\\|\\(?:" polymode-buffers-regexp "\\)"))))
;;━━━━━━━┫ R ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(use-package ess :ensure t
:mode ("\\.R\\'" . r-mode))
;;━━━━━━━┫ Rust ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(use-package rust-mode :ensure t
:mode ("\\.rs\\'" . rust-mode)
:commands rust-mode
:init
;(setq racer-rust-src-path "/home/josh/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src")
(add-hook 'rust-mode-hook
(lambda ()
(interactive)
(setq rust-format-on-save t)
(lsp-mode +1)
(flycheck-mode +1)
;; (racer-mode +1)
)))
(use-package flycheck-rust :ensure t
:after (flycheck rust-mode)
:hook (flycheck-mode-hook . flycheck-rust-setup))
;; (use-package racer :ensure t
;; :commands racer-mode
;; :custom
;; (racer-eldoc-timeout 0.25))
;;━━━━━━━┫ Shell ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(add-hook 'sh-mode-hook
(lambda ()
(setq-local sh-basic-offset 2)
(setq-local sh-indentation 2)))
;;━━━━━━━┫ Stylus ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(use-package stylus-mode :ensure t
:mode ("\\.styl\\'" . stylus-mode)
:commands stylus-mode)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Convenience Fns
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun what-face (pos)
(interactive "d")
(let ((face (or (get-char-property (pos) 'read-face-name)
(get-char-property (pos) 'face))))
(if face (message "Face: %s" face) (message "No face at %d" pos))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment