Configuració de doom
This commit is contained in:
214
.doom.d/config.el
Normal file
214
.doom.d/config.el
Normal file
@@ -0,0 +1,214 @@
|
||||
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; Place your private configuration here! Remember, you do not need to run 'doom
|
||||
;; sync' after modifying this file!
|
||||
|
||||
|
||||
;; Some functionality uses this to identify you, e.g. GPG configuration, email
|
||||
;; clients, file templates and snippets.
|
||||
(setq user-full-name "Marc Sastre Rienitz"
|
||||
user-mail-address "marc@sastre.cat")
|
||||
|
||||
;; Doom exposes five (optional) variables for controlling fonts in Doom. Here
|
||||
;; are the three important ones:
|
||||
;;
|
||||
;; + `doom-font'
|
||||
;; + `doom-variable-pitch-font'
|
||||
;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for
|
||||
;; presentations or streaming.
|
||||
;;
|
||||
;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd
|
||||
;; font string. You generally only need these two:
|
||||
;; (setq doom-font (font-spec :family "monospace" :size 12 :weight 'semi-light)
|
||||
;; doom-variable-pitch-font (font-spec :family "sans" :size 13))
|
||||
(setq doom-font (font-spec :family "Iosevka" :size 15))
|
||||
|
||||
;; There are two ways to load a theme. Both assume the theme is installed and
|
||||
;; available. You can either set `doom-theme' or manually load a theme with the
|
||||
;; `load-theme' function. This is the default:
|
||||
(setq doom-theme 'doom-zenburn)
|
||||
|
||||
;; This determines the style of line numbers in effect. If set to `nil', line
|
||||
;; numbers are disabled. For relative line numbers, set this to `relative'.
|
||||
(setq display-line-numbers-type t)
|
||||
|
||||
|
||||
;; Here are some additional functions/macros that could help you configure Doom:
|
||||
;;
|
||||
;; - `load!' for loading external *.el files relative to this one
|
||||
;; - `use-package!' for configuring packages
|
||||
;; - `after!' for running code after a package has loaded
|
||||
;; - `add-load-path!' for adding directories to the `load-path', relative to
|
||||
;; this file. Emacs searches the `load-path' when you load packages with
|
||||
;; `require' or `use-package'.
|
||||
;; - `map!' for binding new keys
|
||||
;;
|
||||
;; To get information about any of these functions/macros, move the cursor over
|
||||
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
|
||||
;; This will open documentation for it, including demos of how they are used.
|
||||
;;
|
||||
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
|
||||
;; they are implemented.
|
||||
|
||||
;; -----------------------------------------------------------------------------
|
||||
|
||||
(setq-default tab-width 4)
|
||||
|
||||
;; -----------------------------------------------------------------------------
|
||||
;; Projectile
|
||||
;; -----------------------------------------------------------------------------
|
||||
(use-package projectile
|
||||
:config
|
||||
(setq projectile-project-search-path '("~/projects")))
|
||||
|
||||
|
||||
;; -----------------------------------------------------------------------------
|
||||
;; vterm
|
||||
;; -----------------------------------------------------------------------------
|
||||
(use-package vterm
|
||||
:config
|
||||
(setq vterm-shell "fish"))
|
||||
|
||||
|
||||
;; -----------------------------------------------------------------------------
|
||||
;; elisp
|
||||
;; -----------------------------------------------------------------------------
|
||||
(use-package parinfer
|
||||
:defer t)
|
||||
|
||||
;; -----------------------------------------------------------------------------
|
||||
;; Python
|
||||
;; -----------------------------------------------------------------------------
|
||||
(defun my-python-mode-hook ()
|
||||
"Do everything I need when entering python mode"
|
||||
(setq fill-column 120)
|
||||
(add-hook! 'before-save-hook :local #'py-autopep8-buffer #'py-isort-buffer)
|
||||
;; accept underscore as part of a word
|
||||
(superword-mode 1)
|
||||
(modify-syntax-entry ?_ "w" python-mode-syntax-table))
|
||||
|
||||
(add-hook 'python-mode-hook 'my-python-mode-hook)
|
||||
|
||||
(use-package py-autopep8
|
||||
:config
|
||||
(setq py-autopep8-options '("--max-line-length=120")))
|
||||
|
||||
|
||||
(use-package pipenv
|
||||
:config
|
||||
(setq pipenv-with-projectile t)
|
||||
(setenv "PIPENV_MAX_DEPTH" "10"))
|
||||
|
||||
|
||||
;; -----------------------------------------------------------------------------
|
||||
;; Org
|
||||
;; -----------------------------------------------------------------------------
|
||||
|
||||
(setq org-directory "~/org/")
|
||||
|
||||
(defun org-set-trello-mode ()
|
||||
(let ((filename (buffer-file-name (current-buffer))))
|
||||
(when (and filename (string= "trello" (file-name-extension filename)))
|
||||
(org-trello-mode))))
|
||||
|
||||
(use-package org
|
||||
:config
|
||||
(add-to-list 'auto-mode-alist '("\\.trello$" . org-mode))
|
||||
(add-hook! 'org-mode-hook 'org-set-trello-mode))
|
||||
|
||||
|
||||
(use-package org-roam
|
||||
:ensure t
|
||||
:init
|
||||
(setq org-roam-v2-ack t)
|
||||
:custom
|
||||
(org-roam-directory "~/org-roam")
|
||||
(org-roam-capture-templates
|
||||
'(("d" "default" plain "%?"
|
||||
:target (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
|
||||
:unnarrowed t)
|
||||
("m" "màquina" plain (file "~/org-roam/templates/maquina.org")
|
||||
:target (file "%<%Y%m%d%H%M%S>-${slug}.org")
|
||||
:unnarrowed t)
|
||||
("s" "software" plain (file "~/org-roam/templates/software.org")
|
||||
:target (file "%<%Y%m%d%H%M%S>-${slug}.org")
|
||||
:unnarrowed t)))
|
||||
:config
|
||||
(org-roam-setup))
|
||||
|
||||
(use-package org-trello
|
||||
:config
|
||||
;; (setq org-trello-current-prefix-keybinding "SPC r")
|
||||
(defun org-trello-bindings ()
|
||||
"Set the keybindings for org-trello mode"
|
||||
(defun set-key (key fn)
|
||||
(evil-define-key* 'normal org-trello-mode-map
|
||||
(kbd (concat "SPC r" " " key)) fn))
|
||||
(set-key "v" 'org-trello-version)
|
||||
(set-key "i" 'org-trello-install-key-and-token)
|
||||
(set-key "I" 'org-trello-install-board-metadata)
|
||||
(set-key "c" 'org-trello-sync-card)
|
||||
(set-key "s" 'org-trello-sync-buffer)
|
||||
(set-key "a" 'org-trello-assign-me)
|
||||
(set-key "d" 'org-trello-check-setup)
|
||||
(set-key "D" 'org-trello-delete-setup)
|
||||
(set-key "b" 'org-trello-create-board-and-install-metadata)
|
||||
(set-key "k" 'org-trello-kill-entity)
|
||||
(set-key "K" 'org-trello-kill-cards)
|
||||
(set-key "a" 'org-trello-archive-card)
|
||||
(set-key "A" 'org-trello-archive-cards)
|
||||
(set-key "j" 'org-trello-jump-to-trello-card)
|
||||
(set-key "J" 'org-trello-jump-to-trello-board)
|
||||
(set-key "C" 'org-trello-add-card-comments)
|
||||
(set-key "o" 'org-trello-show-card-comments)
|
||||
(set-key "l" 'org-trello-show-card-labels)
|
||||
(set-key "u" 'org-trello-update-board-metadata)
|
||||
(set-key "h" 'org-trello-help-describing-bindings))
|
||||
|
||||
(add-hook! 'org-trello-mode-hook 'org-trello-bindings))
|
||||
|
||||
(use-package! websocket
|
||||
:after org-roam)
|
||||
|
||||
(use-package! org-roam-ui
|
||||
:after org-roam ;; or :after org
|
||||
;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have
|
||||
;; a hookable mode anymore, you're advised to pick something yourself
|
||||
;; if you don't care about startup time, use
|
||||
;; :hook (after-init . org-roam-ui-mode)
|
||||
:config
|
||||
(setq org-roam-ui-sync-theme t
|
||||
org-roam-ui-follow t
|
||||
org-roam-ui-update-on-save t
|
||||
org-roam-ui-open-on-start nil))
|
||||
|
||||
|
||||
;; -----------------------------------------------------------------------------
|
||||
;; Lilypond
|
||||
;; -----------------------------------------------------------------------------
|
||||
|
||||
(load-library "lilypond-mode")
|
||||
(add-to-list 'auto-mode-alist '("\\.ly$" . LilyPond-mode))
|
||||
|
||||
;; -----------------------------------------------------------------------------
|
||||
;; Appearance - Prettify
|
||||
;; -----------------------------------------------------------------------------
|
||||
(load! "prettify-utils.el")
|
||||
|
||||
(pretty-hook python-mode
|
||||
;; ("def" "𝙛")
|
||||
;; ("class" "𝙘")
|
||||
("None" "∅")
|
||||
("lambda" "λ")
|
||||
("not in" "∉")
|
||||
("in" "∈"))
|
||||
|
||||
|
||||
(pretty-hook emacs-lisp-mode)
|
||||
;; ("defun" "𝙛")
|
||||
|
||||
|
||||
(pretty-hook org-mode
|
||||
("[ ]" "☐")
|
||||
("[X]" "☑"))
|
||||
|
||||
12
.doom.d/custom.el
Normal file
12
.doom.d/custom.el
Normal file
@@ -0,0 +1,12 @@
|
||||
(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.
|
||||
'(safe-local-variable-values '((cider-shadow-cljs-default-options . "app"))))
|
||||
(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.
|
||||
)
|
||||
187
.doom.d/init.el
Normal file
187
.doom.d/init.el
Normal file
@@ -0,0 +1,187 @@
|
||||
;;; init.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; This file controls what Doom modules are enabled and what order they load
|
||||
;; in. Remember to run 'doom sync' after modifying it!
|
||||
|
||||
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
|
||||
;; documentation. There you'll find a "Module Index" link where you'll find
|
||||
;; a comprehensive list of Doom's modules and what flags they support.
|
||||
|
||||
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
|
||||
;; 'C-c c k' for non-vim users) to view its documentation. This works on
|
||||
;; flags as well (those symbols that start with a plus).
|
||||
;;
|
||||
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
|
||||
;; directory (for easy access to its source code).
|
||||
|
||||
(doom! :input
|
||||
;;chinese
|
||||
;;japanese
|
||||
;;layout ; auie,ctsrnm is the superior home row
|
||||
|
||||
:completion
|
||||
company ; the ultimate code completion backend
|
||||
;;helm ; the *other* search engine for love and life
|
||||
;;ido ; the other *other* search engine...
|
||||
ivy ; a search engine for love and life
|
||||
|
||||
:ui
|
||||
;;deft ; notational velocity for Emacs
|
||||
doom ; what makes DOOM look the way it does
|
||||
doom-dashboard ; a nifty splash screen for Emacs
|
||||
;; doom-quit ; DOOM quit-message prompts when you quit Emacs
|
||||
;;(emoji +unicode) ; 🙂
|
||||
fill-column ; a `fill-column' indicator
|
||||
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
|
||||
;;hydra
|
||||
;;indent-guides ; highlighted indent columns
|
||||
(ligatures +iosevka) ; ligatures and symbols to make your code pretty again
|
||||
;;minimap ; show a map of the code on the side
|
||||
modeline ; snazzy, Atom-inspired modeline, plus API
|
||||
;;nav-flash ; blink cursor line after big motions
|
||||
neotree ; a project drawer, like NERDTree for vim
|
||||
ophints ; highlight the region an operation acts on
|
||||
(popup +defaults) ; tame sudden yet inevitable temporary windows
|
||||
;;tabs ; a tab bar for Emacs
|
||||
;;treemacs ; a project drawer, like neotree but cooler
|
||||
unicode ; extended unicode support for various languages
|
||||
vc-gutter ; vcs diff in the fringe
|
||||
vi-tilde-fringe ; fringe tildes to mark beyond EOB
|
||||
;;window-select ; visually switch windows
|
||||
workspaces ; tab emulation, persistence & separate workspaces
|
||||
;;zen ; distraction-free coding or writing
|
||||
|
||||
:editor
|
||||
(evil +everywhere); come to the dark side, we have cookies
|
||||
file-templates ; auto-snippets for empty files
|
||||
fold ; (nigh) universal code folding
|
||||
;;(format +onsave) ; automated prettiness
|
||||
;;god ; run Emacs commands without modifier keys
|
||||
;;lispy ; vim for lisp, for people who don't like vim
|
||||
;;multiple-cursors ; editing in many places at once
|
||||
;;objed ; text object editing for the innocent
|
||||
parinfer ; turn lisp into python, sort of
|
||||
;;rotate-text ; cycle region at point between text candidates
|
||||
snippets ; my elves. They type so I don't have to
|
||||
;;word-wrap ; soft wrapping with language-aware indent
|
||||
|
||||
:emacs
|
||||
dired ; making dired pretty [functional]
|
||||
electric ; smarter, keyword-based electric-indent
|
||||
;;ibuffer ; interactive buffer management
|
||||
undo ; persistent, smarter undo for your inevitable mistakes
|
||||
vc ; version-control and Emacs, sitting in a tree
|
||||
|
||||
:term
|
||||
;;eshell ; the elisp shell that works everywhere
|
||||
;;shell ; simple shell REPL for Emacs
|
||||
;;term ; basic terminal emulator for Emacs
|
||||
vterm ; the best terminal emulation in Emacs
|
||||
|
||||
:checkers
|
||||
syntax ; tasing you for every semicolon you forget
|
||||
;;spell ; tasing you for misspelling mispelling
|
||||
;;grammar ; tasing grammar mistake every you make
|
||||
|
||||
:tools
|
||||
;;ansible
|
||||
;;debugger ; FIXME stepping through code, to help you add bugs
|
||||
;;direnv
|
||||
;;docker
|
||||
;;editorconfig ; let someone else argue about tabs vs spaces
|
||||
;;ein ; tame Jupyter notebooks with emacs
|
||||
(eval +overlay) ; run code, run (also, repls)
|
||||
;;gist ; interacting with github gists
|
||||
lookup ; navigate your code and its documentation
|
||||
;;lsp
|
||||
magit ; a git porcelain for Emacs
|
||||
;;make ; run make tasks from Emacs
|
||||
;;pass ; password manager for nerds
|
||||
;;pdf ; pdf enhancements
|
||||
;;prodigy ; FIXME managing external services & code builders
|
||||
;;rgb ; creating color strings
|
||||
;;taskrunner ; taskrunner for all your projects
|
||||
;;terraform ; infrastructure as code
|
||||
;;tmux ; an API for interacting with tmux
|
||||
;;upload ; map local to remote projects via ssh/ftp
|
||||
|
||||
:os
|
||||
(:if IS-MAC macos) ; improve compatibility with macOS
|
||||
;;tty ; improve the terminal Emacs experience
|
||||
|
||||
:lang
|
||||
;;agda ; types of types of types of types...
|
||||
;;cc ; C/C++/Obj-C madness
|
||||
clojure ; java with a lisp
|
||||
;;common-lisp ; if you've seen one lisp, you've seen them all
|
||||
;;coq ; proofs-as-programs
|
||||
;;crystal ; ruby at the speed of c
|
||||
;;csharp ; unity, .NET, and mono shenanigans
|
||||
;;data ; config/data formats
|
||||
;;(dart +flutter) ; paint ui and not much else
|
||||
;;elixir ; erlang done right
|
||||
;;elm ; care for a cup of TEA?
|
||||
emacs-lisp ; drown in parentheses
|
||||
;;erlang ; an elegant language for a more civilized age
|
||||
;;ess ; emacs speaks statistics
|
||||
;;faust ; dsp, but you get to keep your soul
|
||||
;;fsharp ; ML stands for Microsoft's Language
|
||||
;;fstar ; (dependent) types and (monadic) effects and Z3
|
||||
;;gdscript ; the language you waited for
|
||||
;;(go +lsp) ; the hipster dialect
|
||||
;;(haskell +dante) ; a language that's lazier than I am
|
||||
;;hy ; readability of scheme w/ speed of python
|
||||
;;idris ; a language you can depend on
|
||||
json ; At least it ain't XML
|
||||
;;(java +meghanada) ; the poster child for carpal tunnel syndrome
|
||||
;;javascript ; all(hope(abandon(ye(who(enter(here))))))
|
||||
;;julia ; a better, faster MATLAB
|
||||
;;kotlin ; a better, slicker Java(Script)
|
||||
latex ; writing papers in Emacs has never been so fun
|
||||
;;lean
|
||||
;;factor
|
||||
;;ledger ; an accounting system in Emacs
|
||||
;;lua ; one-based indices? one-based indices
|
||||
markdown ; writing docs for people to ignore
|
||||
;;nim ; python + lisp at the speed of c
|
||||
;;nix ; I hereby declare "nix geht mehr!"
|
||||
;;ocaml ; an objective camel
|
||||
(org
|
||||
+journal
|
||||
+roam2
|
||||
+pretty) ; organize your plain life in plain text
|
||||
php ; perl's insecure younger brother
|
||||
;;plantuml ; diagrams for confusing people more
|
||||
;;purescript ; javascript, but functional
|
||||
python ; beautiful is better than ugly
|
||||
;;qt ; the 'cutest' gui framework ever
|
||||
;;racket ; a DSL for DSLs
|
||||
;;raku ; the artist formerly known as perl6
|
||||
rest ; Emacs as a REST client
|
||||
;;rst ; ReST in peace
|
||||
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
|
||||
;;rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
|
||||
;;scala ; java, but good
|
||||
;;scheme ; a fully conniving family of lisps
|
||||
sh ; she sells {ba,z,fi}sh shells on the C xor
|
||||
;;sml
|
||||
;;solidity ; do you need a blockchain? No.
|
||||
;;swift ; who asked for emoji variables?
|
||||
;;terra ; Earth and Moon in alignment for performance.
|
||||
;;web ; the tubes
|
||||
yaml ; JSON, but readable
|
||||
|
||||
:email
|
||||
;;(mu4e +gmail)
|
||||
;;notmuch
|
||||
;;(wanderlust +gmail)
|
||||
|
||||
:app
|
||||
;;calendar
|
||||
;;irc ; how neckbeards socialize
|
||||
;;(rss +org) ; emacs as an RSS reader
|
||||
;;twitter ; twitter client https://twitter.com/vnought
|
||||
|
||||
:config
|
||||
;;literate
|
||||
(default +bindings +smartparens))
|
||||
66
.doom.d/packages.el
Normal file
66
.doom.d/packages.el
Normal file
@@ -0,0 +1,66 @@
|
||||
;; -*- no-byte-compile: t; -*-
|
||||
;;; $DOOMDIR/packages.el
|
||||
|
||||
;; To install a package with Doom you must declare them here and run 'doom sync'
|
||||
;; on the command line, then restart Emacs for the changes to take effect -- or
|
||||
;; use 'M-x doom/reload'.
|
||||
|
||||
|
||||
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
||||
;(package! some-package)
|
||||
|
||||
;; To install a package directly from a remote git repo, you must specify a
|
||||
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
|
||||
;; https://github.com/raxod502/straight.el#the-recipe-format
|
||||
;(package! another-package
|
||||
; :recipe (:host github :repo "username/repo"))
|
||||
|
||||
;; If the package you are trying to install does not contain a PACKAGENAME.el
|
||||
;; file, or is located in a subdirectory of the repo, you'll need to specify
|
||||
;; `:files' in the `:recipe':
|
||||
;(package! this-package
|
||||
; :recipe (:host github :repo "username/repo"
|
||||
; :files ("some-file.el" "src/lisp/*.el")))
|
||||
|
||||
;; If you'd like to disable a package included with Doom, you can do so here
|
||||
;; with the `:disable' property:
|
||||
;(package! builtin-package :disable t)
|
||||
|
||||
;; You can override the recipe of a built in package without having to specify
|
||||
;; all the properties for `:recipe'. These will inherit the rest of its recipe
|
||||
;; from Doom or MELPA/ELPA/Emacsmirror:
|
||||
;(package! builtin-package :recipe (:nonrecursive t))
|
||||
;(package! builtin-package-2 :recipe (:repo "myfork/package"))
|
||||
|
||||
;; Specify a `:branch' to install a package from a particular branch or tag.
|
||||
;; This is required for some packages whose default branch isn't 'master' (which
|
||||
;; our package manager can't deal with; see raxod502/straight.el#279)
|
||||
;(package! builtin-package :recipe (:branch "develop"))
|
||||
|
||||
;; Use `:pin' to specify a particular commit to install.
|
||||
;(package! builtin-package :pin "1a2b3c4d5e")
|
||||
|
||||
|
||||
;; Doom's packages are pinned to a specific commit and updated from release to
|
||||
;; release. The `unpin!' macro allows you to unpin single packages...
|
||||
;(unpin! pinned-package)
|
||||
;; ...or multiple packages
|
||||
;(unpin! pinned-package another-pinned-package)
|
||||
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
|
||||
;(unpin! t)
|
||||
|
||||
(package! parinfer)
|
||||
|
||||
;; Editor
|
||||
(package! dot-mode)
|
||||
|
||||
;; Python
|
||||
(package! py-autopep8)
|
||||
|
||||
;; Org
|
||||
(package! org-trello)
|
||||
|
||||
;; Org-Roam UI
|
||||
(unpin! org-roam)
|
||||
(package! websocket)
|
||||
(package! org-roam-ui :recipe (:host github :repo "org-roam/org-roam-ui" :files ("*.el" "out")))
|
||||
227
.doom.d/prettify-utils.el
Normal file
227
.doom.d/prettify-utils.el
Normal file
@@ -0,0 +1,227 @@
|
||||
;;; prettify-utils.el --- Helper functions for prettify-symbols-mode -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright © 2016 Ilazki
|
||||
|
||||
;; Author: Ilazki
|
||||
;; Created: 31 Oct 2016
|
||||
;; URL: https://github.com/Ilazki/prettify-utils.el
|
||||
;; Keywords: lisp tools prettify utils prettify-symbols
|
||||
;; Version: 1.0.2
|
||||
;; Package-Version: 20161110.0430
|
||||
;; Package-Requires: ((emacs "24.4"))
|
||||
|
||||
;; This file is not part of GNU Emacs.
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Prettify-utils provides helper functions to simplify configuration of emacs'
|
||||
;; prettify-symbols-mode. For the unfamiliar, prettify-symbols-mode detects
|
||||
;; user-defined character combinations and replaces them with different ones
|
||||
;; (usually ligatures) on-screen without changing the source file. For example,
|
||||
;; it can be used to display "≥" any time ">=" is found.
|
||||
;;
|
||||
;; Unfortunately, setup of prettify-symbols-mode is more complicated than it
|
||||
;; needs to be, especially if you want the replacement string to be multiple
|
||||
;; characters instead of just one. For example, displaying "→ " for "->" in
|
||||
;; order to improve appearance while still preserving the real character length.
|
||||
;;
|
||||
;; To use prettify-symbols, you have to set a buffer-local variable,
|
||||
;; prettify-symbols-alist, to an alist containing string/replacement pairs. This
|
||||
;; package provides a helper macro, prettify-utils-generate, to create the alist
|
||||
;; in a simple, uniform manner, like so:
|
||||
;;
|
||||
;; (setq prettify-symbols-alist
|
||||
;; (prettify-utils-generate
|
||||
;; ("lambda" "λ")
|
||||
;; ("<=" "≤")
|
||||
;; (">=" "≥")
|
||||
;; ("->" "→ ")))
|
||||
;;
|
||||
;;
|
||||
;; Since prettify-symbols uses buffer-local settings, you have to add the alist
|
||||
;; for each buffer. The easiest way to do this is to add it to a mode's hooks.
|
||||
;; Example:
|
||||
;;
|
||||
;; (add-hook 'prog-mode-hook (lambda ()
|
||||
;; (setq prettify-symbols-alist
|
||||
;; (prettify-utils-generate
|
||||
;; ("lambda" "λ")))
|
||||
;; (prettify-symbols-mode 1)))
|
||||
;;
|
||||
;; For convenience, a macro named pretty-hook is also available
|
||||
;; that generates the above automatically.
|
||||
;; Example:
|
||||
;;
|
||||
;; (pretty-hook prog-mode-hook
|
||||
;; ("lambda" "λ")))
|
||||
;;
|
||||
;; Or, if you're using the same alist for multiple modes, you can create a named
|
||||
;; function and pass that to the mode hooks:
|
||||
;;
|
||||
;; (defun my-symbols-alist ()
|
||||
;; (setq prettify-symbols-alist
|
||||
;; (prettify-utils-generate
|
||||
;; ("lambda" "λ")
|
||||
;; ("->" "→")
|
||||
;; ("=>" "⇒"))))
|
||||
;; (add-hook 'prog-mode-hook 'my-symbols-alist)
|
||||
;;
|
||||
;; Generally, prettify-utils-generate and pretty-hook should be the
|
||||
;; only things needed, but some additional helpers are provided in case a need
|
||||
;; arises:
|
||||
;;
|
||||
;; * prettify-utils-generate-f is the function equivalent of using
|
||||
;; prettify-utils-generate. Should only be needed for creating higher-order
|
||||
;; functions.
|
||||
;; * prettify-utils-create-pair is the function used by other functions to create
|
||||
;; alist pairs.
|
||||
;; * prettify-utils-string converts a string into the list format required by
|
||||
;; prettify-symbols-alist.
|
||||
;;
|
||||
;; For more information about any functions or macros provided, as well as
|
||||
;; additional example use, refer to any function's docstring with
|
||||
;; `M-x describe-function`.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(provide 'prettify-utils)
|
||||
|
||||
;;;###autoload
|
||||
(defun prettify-utils--list (l &optional glue)
|
||||
"Takes two lists and interleaves the (optional) second between each element of
|
||||
the first. Used to create multi-character sequences for use with the minor mode
|
||||
`prettify-symbols-mode'. If not supplied, GLUE defaults to '(Br . Bl). For more
|
||||
information about GLUE, refer to the documentation for the `compose-region'
|
||||
function and the `reference-point-alist' variable.
|
||||
This function is used by `prettify-utils-string' to create the lists given to
|
||||
`prettify-symbols-alist'. Calling prettify-utils--list directly is probably not
|
||||
what you want, check the documentation for `prettify-utils-string' and
|
||||
`prettify-utils-generate' instead.
|
||||
Example use:
|
||||
(prettify-utils--list (string-to-list \"hello\") '(Br . Bl))
|
||||
"
|
||||
|
||||
(let ((glue (or glue '(Br . Bl)))
|
||||
(head (car l))
|
||||
(tail (cdr l)))
|
||||
(cond
|
||||
((not (consp l)) '())
|
||||
((not (consp tail)) (list head))
|
||||
(t (cons head
|
||||
(cons glue
|
||||
(prettify-utils--list tail glue)))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun prettify-utils-string (s &optional glue)
|
||||
"Takes a string and an optional list, and returns a list of the string's
|
||||
characters with GLUE interleaved between each character, for use with
|
||||
`prettify-symbols-mode'. If no GLUE is supplied, uses the
|
||||
`prettify-utils--list' default. For more information about GLUE, refer to the
|
||||
documentation for the `compose-region' function and the `reference-point-alist'
|
||||
variable.
|
||||
This function can be used to simplify multiple-character replacements when
|
||||
manually constructing a `prettify-symbols-alist'. For something more high-level,
|
||||
consider using `prettify-utils-generate' to create the entire alist instead.
|
||||
Example:
|
||||
(prettify-utils-string \"example\" '(Br . Bl))
|
||||
"
|
||||
(prettify-utils--list (append s nil) glue))
|
||||
|
||||
;; Was used during macro creation then removed
|
||||
(defun prettify-utils-create-pair (old new &optional glue)
|
||||
"Takes two strings, OLD and NEW, and an optional GLUE list, and creates an
|
||||
alist pair for use when creating a `prettify-symbols-alist'. For more information
|
||||
about GLUE, refer to the documentation for the `compose-region' function and the
|
||||
`reference-point-alist' variable.
|
||||
This function is primarily for use by the user-friendly `prettify-utils-generate'
|
||||
macro, but may be useful if manual alist creation is desired for some reason.
|
||||
Example:
|
||||
(setq prettify-symbols-alist `((\">=\" ?≥)
|
||||
,(prettify-utils-create-pair \"foo\" \"bar\" '(Br . Bl))))
|
||||
"
|
||||
(cons old (prettify-utils-string new glue)))
|
||||
|
||||
;;;###autoload
|
||||
(defmacro prettify-utils-generate (&rest lists)
|
||||
"Generates an alist for use when setting `prettify-symbols-alist'. Takes one or
|
||||
more LISTS, each consisting of two strings and an optional GLUE list to be
|
||||
interleaved between characters in the replacement list. If the optional GLUE
|
||||
list is not supplied, uses the `prettify-utils--list' default of '(Br . Bl). For more
|
||||
information about GLUE, refer to the documentation for the `compose-region'
|
||||
function and the `reference-point-alist' variable.
|
||||
Example #1:
|
||||
(setq prettify-symbols-alist
|
||||
(prettify-utils-generate (\"foo\" \"bar\")
|
||||
(\">=\" \"≥\" (Br . Bl))
|
||||
(\"->\" \"→ \")))
|
||||
Example #2:
|
||||
(setq prettify-symbols-alist
|
||||
(prettify-utils-generate
|
||||
(\"lambda\" \"λ\")
|
||||
(\"|>\" \"▷\")
|
||||
(\"<|\" \"◁\")
|
||||
(\"->>\" \"↠ \")
|
||||
(\"->\" \"→ \")
|
||||
(\"<-\" \"← \")
|
||||
(\"=>\" \"⇒\")
|
||||
(\"<=\" \"≤\")
|
||||
(\">=\" \"≥\")))
|
||||
"
|
||||
(let* ((head (car lists))
|
||||
(tail (cdr lists))
|
||||
(old-string (car head))
|
||||
(new-string (cadr head))
|
||||
(glue-list (caddr head)))
|
||||
(if (not (consp head))
|
||||
'()
|
||||
`(cons (quote ,(prettify-utils-create-pair old-string new-string glue-list))
|
||||
(prettify-utils-generate ,@tail)))))
|
||||
|
||||
|
||||
;;;###autoload
|
||||
(defun prettify-utils-generate-f (&rest lists)
|
||||
"Generates an alist for use when setting `prettify-symbols-alist'. Takes one or
|
||||
more LISTS, each consisting of two strings and an optional GLUE list to be
|
||||
interleaved between characters in the replacement list. If the optional GLUE
|
||||
list is not supplied, uses the `prettify-utils--list' default of '(Br . Bl). For more
|
||||
information about GLUE, refer to the documentation for the `compose-region'
|
||||
function and the `reference-point-alist' variable.
|
||||
This is a function equivalent of the `prettify-utils-generate' macro. Unless
|
||||
you specifically need a function, such as for use with a higher-order function,
|
||||
you should use the `prettify-utils-generate' macro instead.
|
||||
Example:
|
||||
(prettify-utils-generate-f '(\"foo\" \"bar\")
|
||||
'(\">=\" \"≥\" (Br . Bl))
|
||||
'(\"->\" \"→ \"))
|
||||
"
|
||||
(let* ((head (car lists))
|
||||
(tail (cdr lists))
|
||||
(old-string (car head))
|
||||
(new-string (cadr head))
|
||||
(glue-list (caddr head)))
|
||||
(if (not (consp head))
|
||||
'()
|
||||
(cons (prettify-utils-create-pair old-string new-string glue-list)
|
||||
(apply 'prettify-utils-generate-f tail)))))
|
||||
|
||||
;; Macro based on a suggestion and example code by reddit user /u/Kungsgeten
|
||||
;; Github @ https://github.com/Kungsgeten/
|
||||
;;;###autoload
|
||||
(defmacro pretty-hook (mode &rest lists)
|
||||
"Convenience macro for the most likely use case of prettify-utils: using
|
||||
`add-hook' to add LISTS to MODE. LISTS consists of one or more lists of
|
||||
replacements, defined as expected by `prettify-utils-generate'.
|
||||
Example:
|
||||
;; Replace org-mode checkboxes with appropriate unicode boxes
|
||||
(pretty-hook org-mode
|
||||
(\"[ ]\" \"☐\")
|
||||
(\"[X]\" \"☑\")
|
||||
(\"[-]\" \"❍\"))
|
||||
"
|
||||
`(add-hook ',(intern (concat (symbol-name mode) "-hook"))
|
||||
(lambda ()
|
||||
(setq prettify-symbols-alist
|
||||
(prettify-utils-generate ,@lists))
|
||||
(prettify-symbols-mode 1))))
|
||||
|
||||
;;; prettify-utils.el ends here
|
||||
Reference in New Issue
Block a user