Human Readable Emacs Configuration using Org mode
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1918 lines
236 KiB

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2019-02-13 Wed 14:20 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Emacs Configuration</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Levi Olson" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="public/style.css" />
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2018 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</script>
</head>
<body>
<div id="content">
<h1 class="title">Emacs Configuration</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org16a3131">1. Summary</a></li>
<li><a href="#orgd2454b8">2. Required Magic</a>
<ul>
<li><a href="#orge7f7842">2.1. Lexical Binding</a></li>
<li><a href="#orgeac8741">2.2. The Magical Glue</a></li>
</ul>
</li>
<li><a href="#orgdd7a8f9">3. Config</a>
<ul>
<li><a href="#orgef94b48">3.1. Packages</a></li>
<li><a href="#org9ed8991">3.2. Better Defaults</a></li>
<li><a href="#orgf243037">3.3. Splash Screen</a></li>
<li><a href="#orgb5be00a">3.4. Basic Customization</a></li>
<li><a href="#org562681e">3.5. Tools</a>
<ul>
<li><a href="#org109467d">3.5.1. General</a></li>
<li><a href="#orgd250d2a">3.5.2. Company</a></li>
<li><a href="#org9528493">3.5.3. Diminish</a></li>
<li><a href="#org749f012">3.5.4. Dired</a></li>
<li><a href="#org8d51860">3.5.5. Ivy</a></li>
<li><a href="#org2368349">3.5.6. Magit</a></li>
<li><a href="#org1a832bf">3.5.7. Projectile</a></li>
</ul>
</li>
<li><a href="#org1fb6ffa">3.6. Development Specific</a>
<ul>
<li><a href="#org1702ed3">3.6.1. General</a></li>
<li><a href="#org4730a23">3.6.2. Python</a></li>
<li><a href="#org99bcdb6">3.6.3. Go</a></li>
<li><a href="#orgdb1f163">3.6.4. TypeScript</a>
<ul>
<li><a href="#org8ffb8dc">3.6.4.1. TSX</a></li>
<li><a href="#orgebde919">3.6.4.2. JSX</a></li>
</ul>
</li>
<li><a href="#org25376dc">3.6.5. Org</a></li>
</ul>
</li>
<li><a href="#org248d7b2">3.7. Functions</a></li>
<li><a href="#org094bf6b">3.8. Bindings</a></li>
<li><a href="#orgeb794c7">3.9. UI</a>
<ul>
<li><a href="#org7e266c5">3.9.1. Modeline</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-org16a3131" class="outline-2">
<h2 id="org16a3131"><span class="section-number-2">1</span> Summary</h2>
<div class="outline-text-2" id="text-1">
<p>
I've really been wanting to have a nicely formatted emacs config file and this is my attempt at it.
</p>
</div>
</div>
<div id="outline-container-orgd2454b8" class="outline-2">
<h2 id="orgd2454b8"><span class="section-number-2">2</span> Required Magic</h2>
<div class="outline-text-2" id="text-2">
</div>
<div id="outline-container-orge7f7842" class="outline-3">
<h3 id="orge7f7842"><span class="section-number-3">2.1</span> Lexical Binding</h3>
<div class="outline-text-3" id="text-2-1">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #3e4451;">;;; </span><span style="color: #545862;">-*- lexical-binding: t -*-</span>
<span style="color: #3e4451;">;;; </span><span style="color: #545862;">DO NOT EDIT THIS FILE DIRECTLY</span>
<span style="color: #3e4451;">;;; </span><span style="color: #545862;">EDIT ~init.org~ instead</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgeac8741" class="outline-3">
<h3 id="orgeac8741"><span class="section-number-3">2.2</span> The Magical Glue</h3>
<div class="outline-text-3" id="text-2-2">
<p>
The following auto compiles the emacs-lisp within the <code>init.org</code> file.
Simply run `org-babel-tangle` to make it RAIN!
</p>
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #3e4451;">;; </span><span style="color: #545862;">(setq byte-compile-warnings nil)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">tangle-init</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"If the current buffer is 'init.org' the code-blocks are tangled, and the tangled file is compiled."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when</span> <span style="color: #56b6c2;">(</span>equal <span style="color: #98c379;">(</span>buffer-file-name<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>expand-file-name <span style="color: #e5c07b;">(</span>concat user-emacs-directory <span style="color: #98c379;">"init.org"</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Avoid running hooks when tangling.</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>prog-mode-hook nil<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>org-babel-tangle<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>byte-compile-file <span style="color: #e5c07b;">(</span>concat user-emacs-directory <span style="color: #98c379;">"init.el"</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'after-save-hook 'tangle-init<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgdd7a8f9" class="outline-2">
<h2 id="orgdd7a8f9"><span class="section-number-2">3</span> Config</h2>
<div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-orgef94b48" class="outline-3">
<h3 id="orgef94b48"><span class="section-number-3">3.1</span> Packages</h3>
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">package</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">my-packages</span>
'<span style="color: #61afef;">(</span>all-the-icons
anzu
base16-theme
better-defaults
company
company-go
counsel
counsel-projectile
dash-at-point
diminish
dockerfile-mode
doom-themes
ein
eldoc-eval
elpy
expand-region
fic-mode
gitignore-mode
go-mode
go-playground
gorepl-mode
flycheck
iedit
ivy
ivy-hydra
json-mode
magit
material-theme
multiple-cursors
projectile
py-autopep8
rainbow-delimiters
shrink-path
tide
typescript-mode
use-package
web-mode
which-key<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'package-archives '<span style="color: #61afef;">(</span><span style="color: #98c379;">"melpa"</span> . <span style="color: #98c379;">"http://melpa.org/packages/"</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'package-archives '<span style="color: #61afef;">(</span><span style="color: #98c379;">"melpa-stable"</span> . <span style="color: #98c379;">"http://stable.melpa.org/packages/"</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">when</span> <span style="color: #61afef;">(</span>not package-archive-contents<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>package-refresh-contents<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>package-initialize<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">dolist</span> <span style="color: #61afef;">(</span>p my-packages<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when</span> <span style="color: #56b6c2;">(</span>not <span style="color: #98c379;">(</span>package-installed-p p<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>package-install p<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org9ed8991" class="outline-3">
<h3 id="org9ed8991"><span class="section-number-3">3.2</span> Better Defaults</h3>
<div class="outline-text-3" id="text-3-2">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">better-defaults</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Instead of the annoying giant warning icon, just flash the modeline.</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(this happens when you do something like C-g)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> ring-bell-function
<span style="color: #61afef;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #56b6c2;">()</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>orig-fg <span style="color: #d19a66;">(</span>face-foreground 'mode-line<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>set-face-foreground 'mode-line <span style="color: #98c379;">"#F2804F"</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>run-with-idle-timer 0.1 nil
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #d19a66;">(</span>fg<span style="color: #d19a66;">)</span> <span style="color: #d19a66;">(</span>set-face-foreground 'mode-line fg<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
orig-fg<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">set-frame-size-according-to-resolution</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Set the Emacs window size on startup."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">if</span> window-system
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">progn</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">WIDTH</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e5c07b;">(</span>&gt; <span style="color: #d19a66;">(</span>x-display-pixel-width<span style="color: #d19a66;">)</span> 1280<span style="color: #e5c07b;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Large Screen (only show 120 cols)</span>
<span style="color: #e5c07b;">(</span>add-to-list 'default-frame-alist <span style="color: #d19a66;">(</span>cons 'width 240<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Small Screen (fill window)</span>
<span style="color: #e5c07b;">(</span>add-to-list 'default-frame-alist <span style="color: #d19a66;">(</span>cons 'width <span style="color: #e06c75;">(</span>/ <span style="color: #545862;">(</span>x-display-pixel-width<span style="color: #545862;">)</span> <span style="color: #545862;">(</span>frame-char-width<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">HEIGHT</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e5c07b;">(</span>&gt; <span style="color: #d19a66;">(</span>x-display-pixel-height<span style="color: #d19a66;">)</span> 1080<span style="color: #e5c07b;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Large Screen (only fill half screen)</span>
<span style="color: #e5c07b;">(</span>add-to-list 'default-frame-alist <span style="color: #d19a66;">(</span>cons 'height <span style="color: #e06c75;">(</span>/ <span style="color: #545862;">(</span>/ <span style="color: #abb2bf;">(</span>x-display-pixel-height<span style="color: #abb2bf;">)</span> 2<span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>frame-char-height<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Small Screen (fill window)</span>
<span style="color: #e5c07b;">(</span>add-to-list 'default-frame-alist <span style="color: #d19a66;">(</span>cons 'height <span style="color: #e06c75;">(</span>/ <span style="color: #545862;">(</span>x-display-pixel-height<span style="color: #545862;">)</span> <span style="color: #545862;">(</span>frame-char-height<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>set-frame-size-according-to-resolution<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">window-px-width</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Get the width of the Emacs window in pixels."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>* <span style="color: #56b6c2;">(</span>* <span style="color: #98c379;">(</span>window-total-width<span style="color: #98c379;">)</span> 2.874<span style="color: #56b6c2;">)</span> <span style="color: #56b6c2;">(</span>frame-char-width<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">window-px-left-pos</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Calculate the left position of the Emacs window."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>/ <span style="color: #56b6c2;">(</span>- <span style="color: #98c379;">(</span>x-display-pixel-width<span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>window-px-width<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span> 2<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'default-frame-alist <span style="color: #61afef;">(</span>cons 'top 0<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'default-frame-alist <span style="color: #61afef;">(</span>cons 'left 1000<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf243037" class="outline-3">
<h3 id="orgf243037"><span class="section-number-3">3.3</span> Splash Screen</h3>
<div class="outline-text-3" id="text-3-3">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> inhibit-splash-screen nil
fancy-splash-image <span style="color: #98c379;">"~/.emacs.d/public/emacs-logo.png"</span>
fancy-splash-image-file <span style="color: #98c379;">"~/.emacs.d/public/emacs-logo.png"</span><span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb5be00a" class="outline-3">
<h3 id="orgb5be00a"><span class="section-number-3">3.4</span> Basic Customization</h3>
<div class="outline-text-3" id="text-3-4">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">backup-dir</span> <span style="color: #61afef;">(</span>expand-file-name <span style="color: #98c379;">"~/.emacs.d/backup/"</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">autosave-dir</span> <span style="color: #61afef;">(</span>expand-file-name <span style="color: #98c379;">"~/.emacs.d/autosave/"</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> initial-scratch-message nil
backup-directory-alist <span style="color: #61afef;">(</span>list <span style="color: #56b6c2;">(</span>cons <span style="color: #98c379;">".*"</span> backup-dir<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
auto-save-list-file-prefix autosave-dir
auto-save-file-name-transforms `<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span><span style="color: #98c379;">".*"</span> ,autosave-dir t<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>menu-bar-mode 0<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>scroll-bar-mode 0<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>tool-bar-mode 0<span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(load-theme 'doom-city-lights t)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(load-theme 'doom-dracula t)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(load-theme 'doom-nord t)</span>
<span style="color: #c678dd;">(</span>load-theme 'doom-one t<span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(load-theme 'doom-spacegrey t)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(load-theme 'base16-ocean t)</span>
<span style="color: #c678dd;">(</span>load-theme 'base16-onedark t<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-linum-mode t<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-auto-revert-mode t<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defalias</span> '<span style="color: #61afef;">yes-or-no-p</span> 'y-or-n-p<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org562681e" class="outline-3">
<h3 id="org562681e"><span class="section-number-3">3.5</span> Tools</h3>
<div class="outline-text-3" id="text-3-5">
</div>
<div id="outline-container-org109467d" class="outline-4">
<h4 id="org109467d"><span class="section-number-4">3.5.1</span> General</h4>
<div class="outline-text-4" id="text-3-5-1">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">which-key</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>which-key-setup-minibuffer<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>which-key-mode<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">fic-mode</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'js-mode-hook 'fic-mode<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd250d2a" class="outline-4">
<h4 id="orgd250d2a"><span class="section-number-4">3.5.2</span> Company</h4>
<div class="outline-text-4" id="text-3-5-2">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">company</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'after-init-hook 'global-company-mode<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> company-dabbrev-downcase nil<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> company-idle-delay 0.1<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org9528493" class="outline-4">
<h4 id="org9528493"><span class="section-number-4">3.5.3</span> Diminish</h4>
<div class="outline-text-4" id="text-3-5-3">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">diminish</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>diminish 'auto-revert-mode<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>eval-after-load <span style="color: #98c379;">"company"</span> '<span style="color: #61afef;">(</span>diminish 'company-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>eval-after-load <span style="color: #98c379;">"counsel"</span> '<span style="color: #61afef;">(</span>diminish 'counsel-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>eval-after-load <span style="color: #98c379;">"elpy"</span> '<span style="color: #61afef;">(</span>diminish 'elpy-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>eval-after-load <span style="color: #98c379;">"go-mode"</span> '<span style="color: #61afef;">(</span>diminish 'go-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>eval-after-load <span style="color: #98c379;">"go-playground"</span> '<span style="color: #61afef;">(</span>diminish 'go-playground-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>eval-after-load <span style="color: #98c379;">"gorepl-mode"</span> '<span style="color: #61afef;">(</span>diminish 'gorepl-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>eval-after-load <span style="color: #98c379;">"flycheck"</span> '<span style="color: #61afef;">(</span>diminish 'flycheck-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>eval-after-load <span style="color: #98c379;">"ivy"</span> '<span style="color: #61afef;">(</span>diminish 'ivy-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>eval-after-load <span style="color: #98c379;">"projectile"</span> '<span style="color: #61afef;">(</span>diminish 'projectile-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>eval-after-load <span style="color: #98c379;">"which-key"</span> '<span style="color: #61afef;">(</span>diminish 'which-key-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org749f012" class="outline-4">
<h4 id="org749f012"><span class="section-number-4">3.5.4</span> Dired</h4>
<div class="outline-text-4" id="text-3-5-4">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">dired-mode-setup</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Will run as hook for `</span><span style="color: #d19a66;">dired-mode</span><span style="color: #565c64;">'."</span>
<span style="color: #61afef;">(</span>dired-hide-details-mode 1<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'dired-mode-hook 'dired-mode-setup<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org8d51860" class="outline-4">
<h4 id="org8d51860"><span class="section-number-4">3.5.5</span> Ivy</h4>
<div class="outline-text-4" id="text-3-5-5">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">ivy-hydra</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">ivy</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">swiper</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>ivy-mode 1<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>counsel-mode<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> ivy-use-virtual-buffers t
enable-recursive-minibuffers t
ivy-height 25
ivy-initial-inputs-alist nil
ivy-extra-directories nil<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-s"</span><span style="color: #61afef;">)</span> 'swiper<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c C-r"</span><span style="color: #61afef;">)</span> 'ivy-resume<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"M-x"</span><span style="color: #61afef;">)</span> 'counsel-M-x<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-x C-f"</span><span style="color: #61afef;">)</span> 'counsel-find-file<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c g"</span><span style="color: #61afef;">)</span> 'counsel-git<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c j"</span><span style="color: #61afef;">)</span> 'counsel-git-grep<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c k"</span><span style="color: #61afef;">)</span> 'counsel-ag<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key minibuffer-local-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-r"</span><span style="color: #61afef;">)</span> 'counsel-minibuffer-history<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">ivy-open-current-typed-path</span> <span style="color: #61afef;">()</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when</span> ivy--directory
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let*</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>dir ivy--directory<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>text-typed ivy-text<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>path <span style="color: #d19a66;">(</span>concat dir text-typed<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>delete-minibuffer-contents<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>ivy--done path<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key ivy-minibuffer-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"&lt;return&gt;"</span><span style="color: #61afef;">)</span> 'ivy-alt-done<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key ivy-minibuffer-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-f"</span><span style="color: #61afef;">)</span> 'ivy-open-current-typed-path<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org2368349" class="outline-4">
<h4 id="org2368349"><span class="section-number-4">3.5.6</span> Magit</h4>
<div class="outline-text-4" id="text-3-5-6">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">magit</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-x g"</span><span style="color: #61afef;">)</span> 'magit-status<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c g"</span><span style="color: #61afef;">)</span> 'magit-status<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> magit-completing-read-function 'ivy-completing-read<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org1a832bf" class="outline-4">
<h4 id="org1a832bf"><span class="section-number-4">3.5.7</span> Projectile</h4>
<div class="outline-text-4" id="text-3-5-7">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">projectile</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">counsel-projectile</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>projectile-mode<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> projectile-mode-line '<span style="color: #61afef;">(</span><span style="color: #56b6c2;">:eval</span> <span style="color: #56b6c2;">(</span>format <span style="color: #98c379;">" %s"</span> <span style="color: #98c379;">(</span>projectile-project-name<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
projectile-remember-window-configs t
projectile-completion-system 'ivy<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>counsel-projectile-mode<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org1fb6ffa" class="outline-3">
<h3 id="org1fb6ffa"><span class="section-number-3">3.6</span> Development Specific</h3>
<div class="outline-text-3" id="text-3-6">
</div>
<div id="outline-container-org1702ed3" class="outline-4">
<h4 id="org1702ed3"><span class="section-number-4">3.6.1</span> General</h4>
<div class="outline-text-4" id="text-3-6-1">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">rainbow-delimiters</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-flycheck-mode<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'before-save-hook 'delete-trailing-whitespace<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'prog-mode-hook 'rainbow-delimiters-mode<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq-default</span> indent-tabs-mode nil
tab-width 4<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvaralias</span> '<span style="color: #e06c75;">c-basic-offset</span> 'tab-width<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvaralias</span> '<span style="color: #e06c75;">cperl-indent-level</span> 'tab-width<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>electric-pair-mode 1<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>show-paren-mode 1<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">dockerfile-mode</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'auto-mode-alist '<span style="color: #61afef;">(</span><span style="color: #98c379;">"Dockerfile*\\'"</span> . dockerfile-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">gitignore-mode</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'auto-mode-alist '<span style="color: #61afef;">(</span><span style="color: #98c379;">"gitignore\\'"</span> . gitignore-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">json-mode</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'auto-mode-alist '<span style="color: #61afef;">(</span><span style="color: #98c379;">"\\.json\\'"</span> . json-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">web-mode</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'auto-mode-alist '<span style="color: #61afef;">(</span><span style="color: #98c379;">"\\.html\\'"</span> . web-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org4730a23" class="outline-4">
<h4 id="org4730a23"><span class="section-number-4">3.6.2</span> Python</h4>
<div class="outline-text-4" id="text-3-6-2">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span>elpy-enable<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> python-shell-interpreter <span style="color: #98c379;">"jupyter"</span>
python-shell-interpreter-args <span style="color: #98c379;">"console --simple-prompt"</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">when</span> <span style="color: #61afef;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">flycheck</span> nil t<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">setq</span> elpy-modules <span style="color: #56b6c2;">(</span>delq 'elpy-module-flymake elpy-modules<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>add-hook 'elpy-mode-hook 'flycheck-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">py-autopep8</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> py-autopep8-options '<span style="color: #61afef;">(</span><span style="color: #98c379;">"--ignore=E501"</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org99bcdb6" class="outline-4">
<h4 id="org99bcdb6"><span class="section-number-4">3.6.3</span> Go</h4>
<div class="outline-text-4" id="text-3-6-3">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">go-mode</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">go-playground</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">gorepl-mode</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">company-go</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'auto-mode-alist '<span style="color: #61afef;">(</span><span style="color: #98c379;">"\\.go\\'"</span> . go-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'go-mode-hook <span style="color: #61afef;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #56b6c2;">()</span>
<span style="color: #56b6c2;">(</span>add-hook 'before-save-hook 'gofmt-before-save<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>local-set-key <span style="color: #98c379;">(</span>kbd <span style="color: #98c379;">"M-."</span><span style="color: #98c379;">)</span> 'godef-jump<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>local-set-key <span style="color: #98c379;">(</span>kbd <span style="color: #98c379;">"M-,"</span><span style="color: #98c379;">)</span> 'pop-tag-mark<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>local-set-key <span style="color: #98c379;">(</span>kbd <span style="color: #98c379;">"C-c C-c"</span><span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #e5c07b;">()</span>
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>ansi-term<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>comint-send-string <span style="color: #98c379;">"*ansi-term*"</span> <span style="color: #98c379;">"make\n"</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>set <span style="color: #98c379;">(</span>make-local-variable 'company-backends<span style="color: #98c379;">)</span> '<span style="color: #98c379;">(</span>company-go<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">setq</span> company-tooltip-limit 20
company-echo-delay 0
company-begin-commands '<span style="color: #98c379;">(</span>self-insert-command<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>gorepl-mode<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">set-exec-path-from-shell-PATH</span> <span style="color: #61afef;">()</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>path-from-shell <span style="color: #e5c07b;">(</span>replace-regexp-in-string
<span style="color: #98c379;">"[ \t\n]*$"</span>
<span style="color: #98c379;">""</span>
<span style="color: #d19a66;">(</span>shell-command-to-string <span style="color: #98c379;">"$SHELL --login -i -c 'echo $PATH'"</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>setenv <span style="color: #98c379;">"PATH"</span> path-from-shell<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">setq</span> eshell-path-env path-from-shell<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">setq</span> exec-path <span style="color: #98c379;">(</span>split-string path-from-shell path-separator<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">when</span> window-system <span style="color: #61afef;">(</span>set-exec-path-from-shell-PATH<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>setenv <span style="color: #98c379;">"GOPATH"</span> <span style="color: #98c379;">"/Users/leviolson/go"</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'exec-path <span style="color: #98c379;">"/Users/leviolson/go/bin"</span><span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgdb1f163" class="outline-4">
<h4 id="orgdb1f163"><span class="section-number-4">3.6.4</span> TypeScript</h4>
<div class="outline-text-4" id="text-3-6-4">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">setup-tide-mode</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Tide setup function."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>tide-setup<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>flycheck-mode +1<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">setq</span> flycheck-check-syntax-automatically '<span style="color: #56b6c2;">(</span>save mode-enabled<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>eldoc-mode +1<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>tide-hl-identifier-mode +1<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>company-mode +1<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">aligns annotation to the right hand side</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> company-tooltip-align-annotations t<span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">formats the buffer before saving</span>
<span style="color: #c678dd;">(</span>add-hook 'before-save-hook 'tide-format-before-save<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'typescript-mode-hook #'setup-tide-mode<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">typescript-mode</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">tide</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'auto-mode-alist '<span style="color: #61afef;">(</span><span style="color: #98c379;">"\\.ts\\'"</span> . typescript-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'typescript-mode-hook
'<span style="color: #61afef;">(</span>lambda <span style="color: #56b6c2;">()</span>
<span style="color: #56b6c2;">(</span>set <span style="color: #98c379;">(</span>make-local-variable 'company-backends<span style="color: #98c379;">)</span> '<span style="color: #98c379;">(</span>company-tide<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">setq</span> company-tooltip-limit 20
company-echo-delay 0
company-begin-commands '<span style="color: #98c379;">(</span>self-insert-command<span style="color: #98c379;">)</span>
tide-format-options '<span style="color: #98c379;">(</span><span style="color: #56b6c2;">:insertSpaceAfterFunctionKeywordForAnonymousFunctions</span> t <span style="color: #56b6c2;">:placeOpenBraceOnNewLineForFunctions</span> nil<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>tide-setup<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
<div id="outline-container-org8ffb8dc" class="outline-5">
<h5 id="org8ffb8dc"><span class="section-number-5">3.6.4.1</span> TSX</h5>
<div class="outline-text-5" id="text-3-6-4-1">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">web-mode</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'auto-mode-alist '<span style="color: #61afef;">(</span><span style="color: #98c379;">"\\.tsx\\'"</span> . web-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'web-mode-hook
<span style="color: #61afef;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #56b6c2;">()</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">when</span> <span style="color: #98c379;">(</span>string-equal <span style="color: #98c379;">"tsx"</span> <span style="color: #e5c07b;">(</span>file-name-extension buffer-file-name<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>setup-tide-mode<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">enable typescript-tslint checker</span>
<span style="color: #c678dd;">(</span>flycheck-add-mode 'typescript-tslint 'web-mode<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgebde919" class="outline-5">
<h5 id="orgebde919"><span class="section-number-5">3.6.4.2</span> JSX</h5>
<div class="outline-text-5" id="text-3-6-4-2">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">web-mode</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'auto-mode-alist '<span style="color: #61afef;">(</span><span style="color: #98c379;">"\\.jsx\\'"</span> . web-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'web-mode-hook
<span style="color: #61afef;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #56b6c2;">()</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">when</span> <span style="color: #98c379;">(</span>string-equal <span style="color: #98c379;">"jsx"</span> <span style="color: #e5c07b;">(</span>file-name-extension buffer-file-name<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>setup-tide-mode<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">configure jsx-tide checker to run after your default jsx checker</span>
<span style="color: #c678dd;">(</span>flycheck-add-mode 'javascript-eslint 'web-mode<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>flycheck-add-next-checker 'javascript-eslint 'jsx-tide 'append<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org25376dc" class="outline-4">
<h4 id="org25376dc"><span class="section-number-4">3.6.5</span> Org</h4>
<div class="outline-text-4" id="text-3-6-5">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span>org-babel-do-load-languages
'org-babel-load-languages
'<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>js . t<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>shell . t<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>emacs-lisp . t<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">org-src-tab-acts-natively</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> org-src-tab-acts-natively t<span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(setenv "NODE_PATH"</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(getenv "NODE_PATH"))</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">org-confirm-babel-evaluate</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">my-org-confirm-babel-evaluate</span> <span style="color: #61afef;">(</span>lang body<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Execute certain languages without confirming.</span>
<span style="color: #565c64;"> Takes LANG to allow and BODY to execute."</span>
<span style="color: #61afef;">(</span>not <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">or</span> <span style="color: #98c379;">(</span>string= lang <span style="color: #98c379;">"js"</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>string= lang <span style="color: #98c379;">"restclient"</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>string= lang <span style="color: #98c379;">"emacs-lisp"</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>string= lang <span style="color: #98c379;">"shell"</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">setq</span> org-confirm-babel-evaluate #'my-org-confirm-babel-evaluate<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'org-structure-template-alist
<span style="color: #61afef;">(</span>list <span style="color: #98c379;">"e"</span> <span style="color: #56b6c2;">(</span>concat <span style="color: #98c379;">"#+BEGIN_SRC emacs-lisp :results silent\n"</span>
<span style="color: #98c379;">"\n"</span>
<span style="color: #98c379;">"#+END_SRC"</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'org-structure-template-alist
<span style="color: #61afef;">(</span>list <span style="color: #98c379;">"j"</span> <span style="color: #56b6c2;">(</span>concat <span style="color: #98c379;">"#+BEGIN_SRC js :cmd \"babel-node\"\n"</span>
<span style="color: #98c379;">"\n"</span>
<span style="color: #98c379;">"#+END_SRC"</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'org-structure-template-alist
<span style="color: #61afef;">(</span>list <span style="color: #98c379;">"r"</span> <span style="color: #56b6c2;">(</span>concat <span style="color: #98c379;">"#+BEGIN_SRC restclient :results raw\n"</span>
<span style="color: #98c379;">"\n"</span>
<span style="color: #98c379;">"#+END_SRC"</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org248d7b2" class="outline-3">
<h3 id="org248d7b2"><span class="section-number-3">3.7</span> Functions</h3>
<div class="outline-text-3" id="text-3-7">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">find-user-init-file</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Edit the `</span><span style="color: #d19a66;">~/.emacs.d/init.org</span><span style="color: #565c64;">' file."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>find-file <span style="color: #98c379;">"~/.emacs.d/init.org"</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">load-user-init-file</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"LO: Reload the `</span><span style="color: #d19a66;">~/.emacs.d/init.elc</span><span style="color: #565c64;">' file."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>load-file <span style="color: #98c379;">"~/.emacs.d/init.elc"</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">jump-to-symbol-internal</span> <span style="color: #61afef;">(</span><span style="color: #e5c07b;">&amp;optional</span> backwardp<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Jumps to the next symbol near the point if such a symbol exists. If BACKWARDP is non-nil it jumps backward."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let*</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>point <span style="color: #e5c07b;">(</span>point<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>bounds <span style="color: #e5c07b;">(</span>find-tag-default-bounds<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>beg <span style="color: #e5c07b;">(</span>car bounds<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>end <span style="color: #e5c07b;">(</span>cdr bounds<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>str <span style="color: #e5c07b;">(</span>isearch-symbol-regexp <span style="color: #d19a66;">(</span>find-tag-default<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>search <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> backwardp 'search-backward-regexp
'search-forward-regexp<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>goto-char <span style="color: #98c379;">(</span><span style="color: #c678dd;">if</span> backwardp beg end<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>funcall search str nil t<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>&lt;= beg <span style="color: #d19a66;">(</span>point<span style="color: #d19a66;">)</span> end<span style="color: #e5c07b;">)</span> <span style="color: #e5c07b;">(</span>goto-char point<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>backwardp <span style="color: #e5c07b;">(</span>forward-char <span style="color: #d19a66;">(</span>- point beg<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>t <span style="color: #e5c07b;">(</span>backward-char <span style="color: #d19a66;">(</span>- end point<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">jump-to-previous-like-this</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Jumps to the previous occurrence of the symbol at point."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>jump-to-symbol-internal t<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">jump-to-next-like-this</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Jumps to the next occurrence of the symbol at point."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>jump-to-symbol-internal<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">match-paren</span> <span style="color: #61afef;">(</span>arg<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Go to the matching paren if on a paren; otherwise insert ARG (a literal % sign)."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span> <span style="color: #98c379;">"p"</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>looking-at <span style="color: #98c379;">"\\s("</span><span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>forward-list 1<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>looking-back <span style="color: #98c379;">"\\s("</span> 2<span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>backward-char 1<span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>forward-list 1<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>looking-at <span style="color: #98c379;">"\\s)"</span><span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>forward-char 1<span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>backward-list 1<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>looking-back <span style="color: #98c379;">"\\s)"</span> 2<span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>backward-list 1<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span>self-insert-command <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">or</span> arg 1<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">kill-this-buffer-unless-scratch</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Works like `</span><span style="color: #d19a66;">kill-this-buffer</span><span style="color: #565c64;">' unless the current buffer is the *scratch* buffer. In which case the buffer content is deleted and the buffer is buried."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">if</span> <span style="color: #56b6c2;">(</span>not <span style="color: #98c379;">(</span>string= <span style="color: #e5c07b;">(</span>buffer-name<span style="color: #e5c07b;">)</span> <span style="color: #98c379;">"*scratch*"</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>kill-this-buffer<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>delete-region <span style="color: #98c379;">(</span>point-min<span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>point-max<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>switch-to-buffer <span style="color: #98c379;">(</span>other-buffer<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>bury-buffer <span style="color: #98c379;">"*scratch*"</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">delete-backward-sentence</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"LO: Delete to the beginning of the sentence/line."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>delete-region <span style="color: #56b6c2;">(</span>point<span style="color: #56b6c2;">)</span> <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">progn</span> <span style="color: #98c379;">(</span>backward-sentence<span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>point<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">delete-backward-to-boundary</span> <span style="color: #61afef;">(</span>arg<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"LO: Delete backward to the previous word boundary. With ARG, do this many times."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span> <span style="color: #98c379;">"p"</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>a <span style="color: #e5c07b;">(</span>point<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>b <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">progn</span>
<span style="color: #d19a66;">(</span>backward-word arg<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>forward-word<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>point<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">if</span> <span style="color: #98c379;">(</span>&lt; a b<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>delete-region a <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">progn</span> <span style="color: #d19a66;">(</span>backward-word arg<span style="color: #d19a66;">)</span> <span style="color: #d19a66;">(</span>point<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e5c07b;">(</span>= a b<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>delete-region a <span style="color: #d19a66;">(</span><span style="color: #c678dd;">progn</span> <span style="color: #e06c75;">(</span>backward-word arg<span style="color: #e06c75;">)</span> <span style="color: #e06c75;">(</span>point<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>delete-region a b<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">comment-or-uncomment-region-or-line</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Comments or uncomments the region or the current line if there's no active region."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span>beg end<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">if</span> <span style="color: #98c379;">(</span>region-active-p<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">setq</span> beg <span style="color: #e5c07b;">(</span>region-beginning<span style="color: #e5c07b;">)</span> end <span style="color: #e5c07b;">(</span>region-end<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">setq</span> beg <span style="color: #e5c07b;">(</span>line-beginning-position<span style="color: #e5c07b;">)</span> end <span style="color: #e5c07b;">(</span>line-end-position<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>comment-or-uncomment-region beg end<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">fold-toggle</span> <span style="color: #61afef;">(</span>column<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Code folding by COLUMN."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span> <span style="color: #98c379;">"P"</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>set-selective-display
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">or</span> column
<span style="color: #98c379;">(</span><span style="color: #c678dd;">unless</span> selective-display
<span style="color: #e5c07b;">(</span>1+ <span style="color: #d19a66;">(</span>current-column<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">new-line-below</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"LO: Create a new line below current line."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>move-end-of-line 1<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>newline-and-indent<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">new-line-above</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"LO: Create a new line above current line."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>move-beginning-of-line 1<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>newline<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>forward-line -1<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">duplicate-thing</span> <span style="color: #61afef;">(</span>comment<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"LO: Duplicates the current line, or the region if active. If an argument (COMMENT) is given, the duplicated region will be commented out."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span> <span style="color: #98c379;">"P"</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">save-excursion</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>start <span style="color: #d19a66;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e06c75;">(</span>region-active-p<span style="color: #e06c75;">)</span> <span style="color: #e06c75;">(</span>region-beginning<span style="color: #e06c75;">)</span> <span style="color: #e06c75;">(</span>point-at-bol<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>end <span style="color: #d19a66;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e06c75;">(</span>region-active-p<span style="color: #e06c75;">)</span> <span style="color: #e06c75;">(</span>region-end<span style="color: #e06c75;">)</span> <span style="color: #e06c75;">(</span>point-at-eol<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>goto-char end<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">unless</span> <span style="color: #e5c07b;">(</span>region-active-p<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>newline<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>insert <span style="color: #e5c07b;">(</span>buffer-substring start end<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">when</span> comment <span style="color: #e5c07b;">(</span>comment-region start end<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">tidy</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"LO: Ident, untabify and unwhitespacify current buffer, or region if active."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>beg <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> <span style="color: #d19a66;">(</span>region-active-p<span style="color: #d19a66;">)</span> <span style="color: #d19a66;">(</span>region-beginning<span style="color: #d19a66;">)</span> <span style="color: #d19a66;">(</span>point-min<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>end <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> <span style="color: #d19a66;">(</span>region-active-p<span style="color: #d19a66;">)</span> <span style="color: #d19a66;">(</span>region-end<span style="color: #d19a66;">)</span> <span style="color: #d19a66;">(</span>point-max<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>inhibit-message t<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>indent-region beg end<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>whitespace-cleanup<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>untabify beg <span style="color: #98c379;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e5c07b;">(</span>&lt; end <span style="color: #d19a66;">(</span>point-max<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span> end <span style="color: #e5c07b;">(</span>point-max<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">if</span> <span style="color: #98c379;">(</span>region-active-p<span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>message <span style="color: #98c379;">"Indenting Region...Done"</span><span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span>message <span style="color: #98c379;">"Indenting File...Done"</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">phil-columns</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"LO: Good 'ol Phil-Columns."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>message <span style="color: #98c379;">"Good 'ol fill-columns"</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">with-output-to-temp-buffer</span> <span style="color: #98c379;">"*PHIL-COLUMN*"</span>
<span style="color: #56b6c2;">(</span>shell-command <span style="color: #98c379;">"mpv --no-video 'https://www.youtube.com/watch?v=YkADj0TPrJA&amp;t=3m16s' &gt; /dev/null 2&gt;&amp;1 &amp; sleep 8; pkill mpv"</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>other-window 1<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>delete-window<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">declare-function</span> first <span style="color: #98c379;">"Goto FIRST shell."</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">declare-function</span> goto-non-shell-buffer <span style="color: #98c379;">"Goto something other than a shell buffer."</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">declare-function</span> switch-shell <span style="color: #98c379;">"Switch shell."</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">let</span> <span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>last-shell <span style="color: #98c379;">""</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">toggle-shell</span> <span style="color: #56b6c2;">()</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>string-match-p <span style="color: #98c379;">"^\\*shell&lt;[1-9][0-9]*&gt;\\*$"</span> <span style="color: #d19a66;">(</span>buffer-name<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>goto-non-shell-buffer<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>get-buffer last-shell<span style="color: #e5c07b;">)</span> <span style="color: #e5c07b;">(</span>switch-to-buffer last-shell<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>t <span style="color: #e5c07b;">(</span>shell <span style="color: #d19a66;">(</span><span style="color: #c678dd;">setq</span> last-shell <span style="color: #98c379;">"*shell&lt;1&gt;*"</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">switch-shell</span> <span style="color: #56b6c2;">(</span>n<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>buffer-name <span style="color: #d19a66;">(</span>format <span style="color: #98c379;">"*shell&lt;%d&gt;*"</span> n<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">setq</span> last-shell buffer-name<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>get-buffer buffer-name<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>switch-to-buffer buffer-name<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>t <span style="color: #d19a66;">(</span>shell buffer-name<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>rename-buffer buffer-name<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">goto-non-shell-buffer</span> <span style="color: #56b6c2;">()</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let*</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>r <span style="color: #98c379;">"^\\*shell&lt;[1-9][0-9]*&gt;\\*$"</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>shell-buffer-p <span style="color: #d19a66;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #e06c75;">(</span>b<span style="color: #e06c75;">)</span> <span style="color: #e06c75;">(</span>string-match-p r <span style="color: #545862;">(</span>buffer-name b<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>non-shells <span style="color: #d19a66;">(</span>cl-remove-if shell-buffer-p <span style="color: #e06c75;">(</span>buffer-list<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">when</span> non-shells
<span style="color: #e5c07b;">(</span>switch-to-buffer <span style="color: #d19a66;">(</span>first non-shells<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defadvice</span> <span style="color: #61afef;">shell</span> <span style="color: #61afef;">(</span>after kill-with-no-query nil activate<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"."</span>
<span style="color: #61afef;">(</span>set-process-query-on-exit-flag <span style="color: #56b6c2;">(</span>get-buffer-process ad-return-value<span style="color: #56b6c2;">)</span> nil<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">declare-function</span> comint-truncate-buffer <span style="color: #98c379;">"."</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">clear-comint</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Run `</span><span style="color: #d19a66;">comint-truncate-buffer</span><span style="color: #565c64;">' with the `</span><span style="color: #d19a66;">comint-buffer-maximum-size</span><span style="color: #565c64;">' set to zero."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>comint-buffer-maximum-size 0<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>comint-truncate-buffer<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">c-setup</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Compile."</span>
<span style="color: #61afef;">(</span>local-set-key <span style="color: #56b6c2;">(</span>kbd <span style="color: #98c379;">"C-c C-c"</span><span style="color: #56b6c2;">)</span> 'compile<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org094bf6b" class="outline-3">
<h3 id="org094bf6b"><span class="section-number-3">3.8</span> Bindings</h3>
<div class="outline-text-3" id="text-3-8">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">company</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'comint-mode-hook <span style="color: #61afef;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #56b6c2;">()</span> <span style="color: #56b6c2;">(</span>local-set-key <span style="color: #98c379;">(</span>kbd <span style="color: #98c379;">"C-l"</span><span style="color: #98c379;">)</span> 'clear-comint<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'lisp-interaction-mode-hook 'turn-on-eldoc-mode<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'c-mode-common-hook 'c-setup<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-to-list 'auto-mode-alist '<span style="color: #61afef;">(</span><span style="color: #98c379;">"\\.md\\'"</span> . markdown-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">company-active-map</span> <span style="color: #61afef;">(</span>make-keymap<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Company Mode keymap."</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">custom-bindings</span> <span style="color: #61afef;">(</span>make-keymap<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"A keymap of custom bindings."</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key global-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"M-p"</span><span style="color: #61afef;">)</span> 'jump-to-previous-like-this<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key global-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"M-n"</span><span style="color: #61afef;">)</span> 'jump-to-next-like-this<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key global-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"M-&lt;tab&gt;"</span><span style="color: #61afef;">)</span> 'switch-to-next-buffer<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key global-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"M-&lt;backspace&gt;"</span><span style="color: #61afef;">)</span>'delete-backward-to-boundary<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key global-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-&lt;backspace&gt;"</span><span style="color: #61afef;">)</span>'delete-backward-to-boundary<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-S-&lt;down&gt;"</span><span style="color: #61afef;">)</span> 'mc/mark-next-like-this<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-&gt;"</span><span style="color: #61afef;">)</span> 'mc/mark-next-like-this-symbol<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-S-&lt;up&gt;"</span><span style="color: #61afef;">)</span> 'mc/mark-previous-like-this<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-&lt;"</span><span style="color: #61afef;">)</span> 'mc/mark-previous-like-this<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c C-&gt;"</span><span style="color: #61afef;">)</span> 'mc/mark-all-like-this<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #98c379;">"%"</span> 'match-paren<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-x ."</span><span style="color: #61afef;">)</span> 'dash-at-point<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-x ,"</span><span style="color: #61afef;">)</span> 'dash-at-point-with-docset<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>global-set-key <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-s"</span><span style="color: #61afef;">)</span> <span style="color: #61afef;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #56b6c2;">()</span> <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #56b6c2;">)</span> <span style="color: #56b6c2;">(</span>swiper <span style="color: #98c379;">(</span>format <span style="color: #98c379;">"%s"</span> <span style="color: #e5c07b;">(</span>thing-at-point 'symbol<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(dolist (n (number-sequence 1 9))</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(global-set-key (kbd (concat "M-" (int-to-string n)))</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(lambda () (interactive) (switch-shell n))))</span>
<span style="color: #c678dd;">(</span>define-key company-active-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-d"</span><span style="color: #61afef;">)</span> 'company-show-doc-buffer<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key company-active-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-n"</span><span style="color: #61afef;">)</span> 'company-select-next<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key company-active-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-p"</span><span style="color: #61afef;">)</span> 'company-select-previous<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key company-active-map <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"&lt;tab&gt;"</span><span style="color: #61afef;">)</span> 'company-complete<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c p"</span><span style="color: #61afef;">)</span> 'counsel-projectile-switch-project<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c f"</span><span style="color: #61afef;">)</span> 'counsel-projectile-find-file<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c m"</span><span style="color: #61afef;">)</span> 'magit-status<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c D"</span><span style="color: #61afef;">)</span> 'define-word-at-point<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-@"</span><span style="color: #61afef;">)</span> 'er/expand-region<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-#"</span><span style="color: #61afef;">)</span> 'er/contract-region<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-S-c C-S-c"</span><span style="color: #61afef;">)</span> 'mc/edit-lines<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c b"</span><span style="color: #61afef;">)</span> 'ivy-switch-buffer<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c l"</span><span style="color: #61afef;">)</span> 'org-store-link<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c t"</span><span style="color: #61afef;">)</span> 'org-set-tags<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"M-u"</span><span style="color: #61afef;">)</span> 'upcase-dwim<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"M-c"</span><span style="color: #61afef;">)</span> 'capitalize-dwim<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"M-l"</span><span style="color: #61afef;">)</span> 'downcase-dwim<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"M-o"</span><span style="color: #61afef;">)</span> 'other-window<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c s"</span><span style="color: #61afef;">)</span> 'ispell-word<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c C-d"</span><span style="color: #61afef;">)</span> 'org-capture<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c &lt;up&gt;"</span><span style="color: #61afef;">)</span> 'windmove-up<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c &lt;down&gt;"</span><span style="color: #61afef;">)</span> 'windmove-down<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c &lt;left&gt;"</span><span style="color: #61afef;">)</span> 'windmove-left<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c &lt;right&gt;"</span><span style="color: #61afef;">)</span> 'windmove-right<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c a"</span><span style="color: #61afef;">)</span> <span style="color: #61afef;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #56b6c2;">()</span> <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #56b6c2;">)</span> <span style="color: #56b6c2;">(</span>org-agenda nil <span style="color: #98c379;">"n"</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c e"</span><span style="color: #61afef;">)</span> 'find-user-init-file<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-x f"</span><span style="color: #61afef;">)</span> 'phil-columns<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-x k"</span><span style="color: #61afef;">)</span> 'kill-this-buffer-unless-scratch<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c d"</span><span style="color: #61afef;">)</span> 'duplicate-thing<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-c c"</span><span style="color: #61afef;">)</span> 'comment-or-uncomment-region-or-line<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-;"</span><span style="color: #61afef;">)</span> 'comment-or-uncomment-region-or-line<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-o"</span><span style="color: #61afef;">)</span> 'new-line-below<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"C-S-o"</span><span style="color: #61afef;">)</span> 'new-line-above<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"&lt;C-tab&gt;"</span><span style="color: #61afef;">)</span> 'tidy<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"M-q"</span><span style="color: #61afef;">)</span> 'kill-this-buffer<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>define-key custom-bindings <span style="color: #61afef;">(</span>kbd <span style="color: #98c379;">"M-RET"</span><span style="color: #61afef;">)</span> '<span style="color: #61afef;">(</span>lambda <span style="color: #56b6c2;">()</span> <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">interactive</span><span style="color: #56b6c2;">)</span> <span style="color: #56b6c2;">(</span>term <span style="color: #98c379;">(</span>getenv <span style="color: #98c379;">"SHELL"</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">define-minor-mode</span> <span style="color: #61afef;">custom-bindings-mode</span>
<span style="color: #565c64;">"A mode that activates custom-bindings."</span>
t nil custom-bindings<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgeb794c7" class="outline-3">
<h3 id="orgeb794c7"><span class="section-number-3">3.9</span> UI</h3>
<div class="outline-text-3" id="text-3-9">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>member <span style="color: #98c379;">"PragmataPro"</span> <span style="color: #98c379;">(</span>font-family-list<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>set-face-attribute 'default nil <span style="color: #56b6c2;">:font</span> <span style="color: #98c379;">"PragmataPro-14"</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
<div id="outline-container-org7e266c5" class="outline-4">
<h4 id="org7e266c5"><span class="section-number-4">3.9.1</span> Modeline</h4>
<div class="outline-text-4" id="text-3-9-1">
<div class="org-src-container">
<pre class="src src-emacs-lisp"><span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">use-package</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">anzu</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">eldoc-eval</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">iedit</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">projectile</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">require</span> '<span style="color: #d19a66;">all-the-icons</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defsubst</span> <span style="color: #61afef;">doom--prepare-modeline-segments</span> <span style="color: #61afef;">(</span>segments<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">cl-loop</span> for seg in segments
if <span style="color: #56b6c2;">(</span>stringp seg<span style="color: #56b6c2;">)</span>
collect seg
else
collect <span style="color: #56b6c2;">(</span>list <span style="color: #98c379;">(</span>intern <span style="color: #e5c07b;">(</span>format <span style="color: #98c379;">"doom-modeline-segment--%s"</span> <span style="color: #d19a66;">(</span>symbol-name seg<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">doom--transient-counter</span> 0<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defmacro</span> <span style="color: #61afef;">add-transient-hook!</span> <span style="color: #61afef;">(</span>hook <span style="color: #e5c07b;">&amp;rest</span> forms<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Attaches transient forms to a HOOK.</span>
<span style="color: #565c64;">HOOK can be a quoted hook or a sharp-quoted function (which will be advised).</span>
<span style="color: #565c64;">These forms will be evaluated once when that function/hook is first invoked,</span>
<span style="color: #565c64;">then it detaches itself."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">declare</span> <span style="color: #56b6c2;">(</span>indent 1<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>append <span style="color: #e5c07b;">(</span>eq <span style="color: #d19a66;">(</span>car forms<span style="color: #d19a66;">)</span> <span style="color: #56b6c2;">:after</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>fn <span style="color: #e5c07b;">(</span>intern <span style="color: #d19a66;">(</span>format <span style="color: #98c379;">"doom-transient-hook-%s"</span> <span style="color: #e06c75;">(</span><span style="color: #c678dd;">cl-incf</span> doom--transient-counter<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
`<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">when</span> ,hook
<span style="color: #98c379;">(</span>fset ',fn
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #d19a66;">(</span><span style="color: #e5c07b;">&amp;rest</span> _<span style="color: #d19a66;">)</span>
,@forms
<span style="color: #d19a66;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>functionp ,hook<span style="color: #545862;">)</span> <span style="color: #545862;">(</span>advice-remove ,hook #',fn<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>symbolp ,hook<span style="color: #545862;">)</span> <span style="color: #545862;">(</span>remove-hook ,hook #',fn<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>unintern ',fn nil<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>functionp ,hook<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>advice-add ,hook ,<span style="color: #e06c75;">(</span><span style="color: #c678dd;">if</span> append <span style="color: #56b6c2;">:after</span> <span style="color: #56b6c2;">:before</span><span style="color: #e06c75;">)</span> #',fn<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>symbolp ,hook<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>add-hook ,hook #',fn ,append<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defmacro</span> <span style="color: #61afef;">add-hook!</span> <span style="color: #61afef;">(</span><span style="color: #e5c07b;">&amp;rest</span> args<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"A convenience macro for `</span><span style="color: #d19a66;">add-hook</span><span style="color: #565c64;">'. Takes, in order:</span>
<span style="color: #565c64;"> 1. Optional properties :local and/or :append, which will make the hook</span>
<span style="color: #565c64;"> buffer-local or append to the list of hooks (respectively),</span>
<span style="color: #565c64;"> 2. The hooks: either an unquoted major mode, an unquoted list of major-modes,</span>
<span style="color: #565c64;"> a quoted hook variable or a quoted list of hook variables. If unquoted, the</span>
<span style="color: #565c64;"> hooks will be resolved by appending -hook to each symbol.</span>
<span style="color: #565c64;"> 3. A function, list of functions, or body forms to be wrapped in a lambda.</span>
<span style="color: #565c64;">Examples:</span>
<span style="color: #565c64;"> (add-hook! 'some-mode-hook 'enable-something)</span>
<span style="color: #565c64;"> (add-hook! some-mode '(enable-something and-another))</span>
<span style="color: #565c64;"> (add-hook! '(one-mode-hook second-mode-hook) 'enable-something)</span>
<span style="color: #565c64;"> (add-hook! (one-mode second-mode) 'enable-something)</span>
<span style="color: #565c64;"> (add-hook! :append (one-mode second-mode) 'enable-something)</span>
<span style="color: #565c64;"> (add-hook! :local (one-mode second-mode) 'enable-something)</span>
<span style="color: #565c64;"> (add-hook! (one-mode second-mode) (setq v 5) (setq a 2))</span>
<span style="color: #565c64;"> (add-hook! :append :local (one-mode second-mode) (setq v 5) (setq a 2))</span>
<span style="color: #565c64;">Body forms can access the hook's arguments through the let-bound variable</span>
<span style="color: #565c64;">`</span><span style="color: #d19a66;">args</span><span style="color: #565c64;">'."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">declare</span> <span style="color: #56b6c2;">(</span>indent defun<span style="color: #56b6c2;">)</span> <span style="color: #56b6c2;">(</span>debug t<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>hook-fn 'add-hook<span style="color: #98c379;">)</span>
append-p local-p<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">while</span> <span style="color: #98c379;">(</span>keywordp <span style="color: #e5c07b;">(</span>car args<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">pcase</span> <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">pop</span> args<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #56b6c2;">:append</span> <span style="color: #d19a66;">(</span><span style="color: #c678dd;">setq</span> append-p t<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #56b6c2;">:local</span> <span style="color: #d19a66;">(</span><span style="color: #c678dd;">setq</span> local-p t<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #56b6c2;">:remove</span> <span style="color: #d19a66;">(</span><span style="color: #c678dd;">setq</span> hook-fn 'remove-hook<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>hooks <span style="color: #d19a66;">(</span>doom--resolve-hook-forms <span style="color: #e06c75;">(</span><span style="color: #c678dd;">pop</span> args<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>funcs
<span style="color: #d19a66;">(</span><span style="color: #c678dd;">let</span> <span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>val <span style="color: #abb2bf;">(</span>car args<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span><span style="color: #c678dd;">if</span> <span style="color: #545862;">(</span>memq <span style="color: #abb2bf;">(</span>car-safe val<span style="color: #abb2bf;">)</span> '<span style="color: #abb2bf;">(</span><span style="color: #c678dd;">quote</span> function<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> <span style="color: #abb2bf;">(</span>cdr-safe <span style="color: #c678dd;">(</span>cadr val<span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span>cadr val<span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span>list <span style="color: #c678dd;">(</span>cadr val<span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>list args<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
forms<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">dolist</span> <span style="color: #e5c07b;">(</span>fn funcs<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">setq</span> fn <span style="color: #d19a66;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e06c75;">(</span>symbolp fn<span style="color: #e06c75;">)</span>
`<span style="color: #e06c75;">(</span><span style="color: #c678dd;">function</span> ,fn<span style="color: #e06c75;">)</span>
`<span style="color: #e06c75;">(</span><span style="color: #c678dd;">lambda</span> <span style="color: #545862;">(</span><span style="color: #e5c07b;">&amp;rest</span> _<span style="color: #545862;">)</span> ,@args<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">dolist</span> <span style="color: #d19a66;">(</span>hook hooks<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span><span style="color: #c678dd;">push</span> <span style="color: #e06c75;">(</span><span style="color: #c678dd;">if</span> <span style="color: #545862;">(</span>eq hook-fn 'remove-hook<span style="color: #545862;">)</span>
`<span style="color: #545862;">(</span>remove-hook ',hook ,fn ,local-p<span style="color: #545862;">)</span>
`<span style="color: #545862;">(</span>add-hook ',hook ,fn ,append-p ,local-p<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
forms<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
`<span style="color: #98c379;">(</span><span style="color: #c678dd;">progn</span> ,@<span style="color: #e5c07b;">(</span>nreverse forms<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defmacro</span> <span style="color: #61afef;">def-modeline-segment!</span> <span style="color: #61afef;">(</span>name <span style="color: #e5c07b;">&amp;rest</span> forms<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Defines a modeline segment and byte compiles it."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">declare</span> <span style="color: #56b6c2;">(</span>indent defun<span style="color: #56b6c2;">)</span> <span style="color: #56b6c2;">(</span>doc-string 2<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>sym <span style="color: #e5c07b;">(</span>intern <span style="color: #d19a66;">(</span>format <span style="color: #98c379;">"doom-modeline-segment--%s"</span> name<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
`<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">progn</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">defun</span> ,sym <span style="color: #e5c07b;">()</span> ,@forms<span style="color: #98c379;">)</span>
,<span style="color: #98c379;">(</span><span style="color: #c678dd;">unless</span> <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">bound-and-true-p</span> byte-compile-current-file<span style="color: #e5c07b;">)</span>
`<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">let</span> <span style="color: #d19a66;">(</span>byte-compile-warnings<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>byte-compile #',sym<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defmacro</span> <span style="color: #61afef;">def-modeline!</span> <span style="color: #61afef;">(</span>name lhs <span style="color: #e5c07b;">&amp;optional</span> rhs<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Defines a modeline format and byte-compiles it. NAME is a symbol to identify</span>
<span style="color: #565c64;">it (used by `</span><span style="color: #d19a66;">doom-modeline</span><span style="color: #565c64;">' for retrieval). LHS and RHS are lists of symbols of</span>
<span style="color: #565c64;">modeline segments defined with `</span><span style="color: #d19a66;">def-modeline-segment!</span><span style="color: #565c64;">'.</span>
<span style="color: #565c64;">Example:</span>
<span style="color: #565c64;"> (def-modeline! minimal</span>
<span style="color: #565c64;"> (bar matches \" \" buffer-info)</span>
<span style="color: #565c64;"> (media-info major-mode))</span>
<span style="color: #565c64;"> (doom-set-modeline 'minimal t)"</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>sym <span style="color: #e5c07b;">(</span>intern <span style="color: #d19a66;">(</span>format <span style="color: #98c379;">"doom-modeline-format--%s"</span> name<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>lhs-forms <span style="color: #e5c07b;">(</span>doom--prepare-modeline-segments lhs<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>rhs-forms <span style="color: #e5c07b;">(</span>doom--prepare-modeline-segments rhs<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
`<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">progn</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">defun</span> ,sym <span style="color: #e5c07b;">()</span>
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">let</span> <span style="color: #d19a66;">(</span><span style="color: #e06c75;">(</span>lhs <span style="color: #545862;">(</span>list ,@lhs-forms<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>rhs <span style="color: #545862;">(</span>list ,@rhs-forms<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span><span style="color: #c678dd;">let</span> <span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>rhs-str <span style="color: #abb2bf;">(</span>format-mode-line rhs<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>list lhs
<span style="color: #545862;">(</span>propertize
<span style="color: #98c379;">" "</span> 'display
`<span style="color: #abb2bf;">(</span><span style="color: #c678dd;">(</span>space <span style="color: #56b6c2;">:align-to</span> <span style="color: #61afef;">(</span>- <span style="color: #56b6c2;">(</span>+ right right-fringe right-margin<span style="color: #56b6c2;">)</span>
,<span style="color: #56b6c2;">(</span>+ 1 <span style="color: #98c379;">(</span>string-width rhs-str<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
rhs-str<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
,<span style="color: #98c379;">(</span><span style="color: #c678dd;">unless</span> <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">bound-and-true-p</span> byte-compile-current-file<span style="color: #e5c07b;">)</span>
`<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">let</span> <span style="color: #d19a66;">(</span>byte-compile-warnings<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>byte-compile #',sym<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">doom-modeline</span> <span style="color: #61afef;">(</span>key<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Returns a mode-line configuration associated with KEY (a symbol). Throws an</span>
<span style="color: #565c64;">error if it doesn't exist."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>fn <span style="color: #e5c07b;">(</span>intern <span style="color: #d19a66;">(</span>format <span style="color: #98c379;">"doom-modeline-format--%s"</span> key<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">when</span> <span style="color: #98c379;">(</span>functionp fn<span style="color: #98c379;">)</span>
`<span style="color: #98c379;">(</span><span style="color: #56b6c2;">:eval</span> <span style="color: #e5c07b;">(</span>,fn<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">doom-set-modeline</span> <span style="color: #61afef;">(</span>key <span style="color: #e5c07b;">&amp;optional</span> default<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Set the modeline format. Does nothing if the modeline KEY doesn't exist. If</span>
<span style="color: #565c64;">DEFAULT is non-nil, set the default mode-line for all buffers."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when-let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>modeline <span style="color: #e5c07b;">(</span>doom-modeline key<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">setf</span> <span style="color: #98c379;">(</span><span style="color: #c678dd;">if</span> default
<span style="color: #e5c07b;">(</span>default-value 'mode-line-format<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>buffer-local-value 'mode-line-format <span style="color: #d19a66;">(</span>current-buffer<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
modeline<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">use-package</span> <span style="color: #d19a66;">eldoc-eval</span>
<span style="color: #56b6c2;">:config</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline-eldoc</span> <span style="color: #56b6c2;">(</span>text<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>concat <span style="color: #98c379;">(</span><span style="color: #c678dd;">when</span> <span style="color: #e5c07b;">(</span>display-graphic-p<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>+doom-modeline--make-xpm
<span style="color: #d19a66;">(</span>face-background 'doom-modeline-eldoc-bar nil t<span style="color: #d19a66;">)</span>
+doom-modeline-height
+doom-modeline-bar-width<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
text<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Show eldoc in the mode-line with `</span><span style="color: #d19a66;">eval-expression</span><span style="color: #545862;">'</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline--show-eldoc</span> <span style="color: #56b6c2;">(</span>input<span style="color: #56b6c2;">)</span>
<span style="color: #565c64;">"Display string STR in the mode-line next to minibuffer."</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">with-current-buffer</span> <span style="color: #98c379;">(</span>eldoc-current-buffer<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">let*</span> <span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>str <span style="color: #e06c75;">(</span><span style="color: #c678dd;">and</span> <span style="color: #545862;">(</span>stringp input<span style="color: #545862;">)</span> input<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>mode-line-format <span style="color: #e06c75;">(</span><span style="color: #c678dd;">or</span> <span style="color: #545862;">(</span><span style="color: #c678dd;">and</span> str <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">or</span> <span style="color: #c678dd;">(</span>+doom-modeline-eldoc str<span style="color: #c678dd;">)</span> str<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
mode-line-format<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
mode-line-in-non-selected-windows<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>force-mode-line-update<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>sit-for eldoc-show-in-mode-line-delay<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">setq</span> eldoc-in-minibuffer-show-fn #'+doom-modeline--show-eldoc<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>eldoc-in-minibuffer-mode +1<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">anzu and evil-anzu expose current/total state that can be displayed in the</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">mode-line.</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">use-package</span> <span style="color: #d19a66;">anzu</span>
<span style="color: #56b6c2;">:init</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(add-transient-hook! #'ex-start-search (require 'anzu))</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(add-transient-hook! #'ex-start-word-search (require 'anzu))</span>
<span style="color: #56b6c2;">:config</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">setq</span> anzu-cons-mode-line-p nil
anzu-minimum-input-length 1
anzu-search-threshold 250<span style="color: #61afef;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Avoid anzu conflicts across buffers</span>
<span style="color: #61afef;">(</span>mapc #'make-variable-buffer-local
'<span style="color: #56b6c2;">(</span>anzu--total-matched anzu--current-position anzu--state
anzu--cached-count anzu--cached-positions anzu--last-command
anzu--last-isearch-string anzu--overflow-p<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Ensure anzu state is cleared when searches &amp; iedit are done</span>
<span style="color: #61afef;">(</span>add-hook 'isearch-mode-end-hook #'anzu--reset-status t<span style="color: #61afef;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(add-hook '+evil-esc-hook #'anzu--reset-status t)</span>
<span style="color: #61afef;">(</span>add-hook 'iedit-mode-end-hook #'anzu--reset-status<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Keep `</span><span style="color: #d19a66;">+doom-modeline-current-window</span><span style="color: #545862;">' up-to-date</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">+doom-modeline-current-window</span> <span style="color: #61afef;">(</span>frame-selected-window<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline|set-selected-window</span> <span style="color: #61afef;">(</span><span style="color: #e5c07b;">&amp;rest</span> _<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Sets `</span><span style="color: #d19a66;">+doom-modeline-current-window</span><span style="color: #565c64;">' appropriately"</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when-let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>win <span style="color: #e5c07b;">(</span>frame-selected-window<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">unless</span> <span style="color: #98c379;">(</span>minibuffer-window-active-p win<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">setq</span> +doom-modeline-current-window win<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'window-configuration-change-hook #'+doom-modeline|set-selected-window<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'focus-in-hook #'+doom-modeline|set-selected-window<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>advice-add #'handle-switch-frame <span style="color: #56b6c2;">:after</span> #'+doom-modeline|set-selected-window<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>advice-add #'select-window <span style="color: #56b6c2;">:after</span> #'+doom-modeline|set-selected-window<span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">fish-style modeline</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">use-package</span> <span style="color: #d19a66;">shrink-path</span>
<span style="color: #56b6c2;">:commands</span> <span style="color: #61afef;">(</span>shrink-path-prompt shrink-path-file-mixed<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Variables</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">+doom-modeline-height</span> 29
<span style="color: #565c64;">"How tall the mode-line should be (only respected in GUI emacs)."</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">+doom-modeline-bar-width</span> 3
<span style="color: #565c64;">"How wide the mode-line bar should be (only respected in GUI emacs)."</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">+doom-modeline-vspc</span>
<span style="color: #61afef;">(</span>propertize <span style="color: #98c379;">" "</span> 'face 'variable-pitch<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"TODO"</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">+doom-modeline-buffer-file-name-style</span> 'truncate-upto-project
<span style="color: #565c64;">"Determines the style used by `</span><span style="color: #d19a66;">+doom-modeline-buffer-file-name</span><span style="color: #565c64;">'.</span>
<span style="color: #565c64;">Given ~/Projects/FOSS/emacs/lisp/comint.el</span>
<span style="color: #565c64;">truncate-upto-project =&gt; ~/P/F/emacs/lisp/comint.el</span>
<span style="color: #565c64;">truncate-upto-root =&gt; ~/P/F/e/lisp/comint.el</span>
<span style="color: #565c64;">truncate-all =&gt; ~/P/F/e/l/comint.el</span>
<span style="color: #565c64;">relative-from-project =&gt; emacs/lisp/comint.el</span>
<span style="color: #565c64;">relative-to-project =&gt; lisp/comint.el</span>
<span style="color: #565c64;">file-name =&gt; comint.el"</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">externs</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">anzu--state</span> nil<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">evil-mode</span> nil<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">evil-state</span> nil<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">evil-visual-selection</span> nil<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">iedit-mode</span> nil<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">all-the-icons-scale-factor</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defvar</span> <span style="color: #e06c75;">all-the-icons-default-adjust</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Custom faces</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defgroup</span> <span style="color: #e5c07b;">+doom-modeline</span> nil
<span style="color: #565c64;">""</span>
<span style="color: #56b6c2;">:group</span> 'doom<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-buffer-path</span>
'<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> <span style="color: #e5c07b;">(</span>mode-line-emphasis bold<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Face used for the dirname part of the buffer path."</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-buffer-file</span>
'<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> <span style="color: #e5c07b;">(</span>mode-line-buffer-id bold<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Face used for the filename part of the mode-line buffer path."</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-buffer-modified</span>
'<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> <span style="color: #e5c07b;">(</span><span style="color: #e06c75; font-weight: bold;">error</span> bold<span style="color: #e5c07b;">)</span> <span style="color: #56b6c2;">:background</span> nil<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Face used for the 'unsaved' symbol in the mode-line."</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-buffer-major-mode</span>
'<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> <span style="color: #e5c07b;">(</span>mode-line-emphasis bold<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Face used for the major-mode segment in the mode-line."</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-highlight</span>
'<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> mode-line-emphasis<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Face for bright segments of the mode-line."</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-panel</span>
'<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> mode-line-highlight<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Face for 'X out of Y' segments, such as `</span><span style="color: #d19a66;">+doom-modeline--anzu</span><span style="color: #565c64;">', `</span><span style="color: #d19a66;">+doom-modeline--evil-substitute</span><span style="color: #565c64;">' and</span>
<span style="color: #565c64;">`</span><span style="color: #d19a66;">iedit</span><span style="color: #565c64;">'"</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-info</span>
`<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> <span style="color: #e5c07b;">(</span>success bold<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Face for info-level messages in the modeline. Used by `</span><span style="color: #d19a66;">*vc</span><span style="color: #565c64;">'."</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-warning</span>
`<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> <span style="color: #e5c07b;">(</span>warning bold<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Face for warnings in the modeline. Used by `</span><span style="color: #d19a66;">*flycheck</span><span style="color: #565c64;">'"</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-urgent</span>
`<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> <span style="color: #e5c07b;">(</span><span style="color: #e06c75; font-weight: bold;">error</span> bold<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Face for errors in the modeline. Used by `</span><span style="color: #d19a66;">*flycheck</span><span style="color: #565c64;">'"</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Bar</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-bar</span> '<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> highlight<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"The face used for the left-most bar on the mode-line of an active window."</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-eldoc-bar</span> '<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> shadow<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"The face used for the left-most bar on the mode-line when eldoc-eval is</span>
<span style="color: #565c64;">active."</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defface</span> <span style="color: #e06c75;">doom-modeline-inactive-bar</span> '<span style="color: #61afef;">(</span><span style="color: #56b6c2;">(</span>t <span style="color: #98c379;">(</span><span style="color: #56b6c2;">:inherit</span> warning <span style="color: #56b6c2;">:inverse-video</span> t<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span>
<span style="color: #565c64;">"The face used for the left-most bar on the mode-line of an inactive window."</span>
<span style="color: #56b6c2;">:group</span> '+doom-modeline<span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Modeline helpers</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defsubst</span> <span style="color: #61afef;">active</span> <span style="color: #61afef;">()</span>
<span style="color: #61afef;">(</span>eq <span style="color: #56b6c2;">(</span>selected-window<span style="color: #56b6c2;">)</span> +doom-modeline-current-window<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Inspired from `</span><span style="color: #d19a66;">powerline</span><span style="color: #545862;">'s `</span><span style="color: #d19a66;">pl/make-xpm</span><span style="color: #545862;">'.</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline--make-xpm</span> <span style="color: #61afef;">(</span>color height width<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Create an XPM bitmap."</span>
<span style="color: #61afef;">(</span>propertize
<span style="color: #98c379;">" "</span> 'display
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>data <span style="color: #d19a66;">(</span>make-list height <span style="color: #e06c75;">(</span>make-list width 1<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>color <span style="color: #d19a66;">(</span><span style="color: #c678dd;">or</span> color <span style="color: #98c379;">"None"</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>create-image
<span style="color: #e5c07b;">(</span>concat
<span style="color: #d19a66;">(</span>format <span style="color: #98c379;">"/* XPM */\nstatic char * percent[] = {\n\"%i %i 2 1\",\n\". c %s\",\n\" c %s\","</span>
<span style="color: #e06c75;">(</span>length <span style="color: #545862;">(</span>car data<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>length data<span style="color: #e06c75;">)</span>
color
color<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>apply #'concat
<span style="color: #e06c75;">(</span><span style="color: #c678dd;">cl-loop</span> with idx = 0
with len = <span style="color: #545862;">(</span>length data<span style="color: #545862;">)</span>
for dl in data
do <span style="color: #545862;">(</span><span style="color: #c678dd;">cl-incf</span> idx<span style="color: #545862;">)</span>
collect
<span style="color: #545862;">(</span>concat <span style="color: #98c379;">"\""</span>
<span style="color: #abb2bf;">(</span><span style="color: #c678dd;">cl-loop</span> for d in dl
if <span style="color: #c678dd;">(</span>= d 0<span style="color: #c678dd;">)</span> collect <span style="color: #c678dd;">(</span>string-to-char <span style="color: #98c379;">" "</span><span style="color: #c678dd;">)</span>
else collect <span style="color: #c678dd;">(</span>string-to-char <span style="color: #98c379;">"."</span><span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span><span style="color: #c678dd;">if</span> <span style="color: #c678dd;">(</span>eq idx len<span style="color: #c678dd;">)</span> <span style="color: #98c379;">"\"};"</span> <span style="color: #98c379;">"\",\n"</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
'xpm t <span style="color: #56b6c2;">:ascent</span> 'center<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline-buffer-file-name</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Propertized `</span><span style="color: #d19a66;">buffer-file-name</span><span style="color: #565c64;">' based on `</span><span style="color: #d19a66;">+doom-modeline-buffer-file-name-style</span><span style="color: #565c64;">'."</span>
<span style="color: #61afef;">(</span>propertize
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">pcase</span> +doom-modeline-buffer-file-name-style
<span style="color: #98c379;">(</span>'truncate-upto-project <span style="color: #e5c07b;">(</span>+doom-modeline--buffer-file-name 'shrink<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>'truncate-upto-root <span style="color: #e5c07b;">(</span>+doom-modeline--buffer-file-name-truncate<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>'truncate-all <span style="color: #e5c07b;">(</span>+doom-modeline--buffer-file-name-truncate t<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>'relative-to-project <span style="color: #e5c07b;">(</span>+doom-modeline--buffer-file-name-relative<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>'relative-from-project <span style="color: #e5c07b;">(</span>+doom-modeline--buffer-file-name-relative 'include-project<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>'file-name <span style="color: #e5c07b;">(</span>propertize <span style="color: #d19a66;">(</span>file-name-nondirectory buffer-file-name<span style="color: #d19a66;">)</span>
'face
<span style="color: #d19a66;">(</span><span style="color: #c678dd;">let</span> <span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>face <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">or</span> <span style="color: #c678dd;">(</span><span style="color: #c678dd;">and</span> <span style="color: #61afef;">(</span>buffer-modified-p<span style="color: #61afef;">)</span>
'doom-modeline-buffer-modified<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">and</span> <span style="color: #61afef;">(</span>active<span style="color: #61afef;">)</span>
'doom-modeline-buffer-file<span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span><span style="color: #c678dd;">when</span> face `<span style="color: #545862;">(</span><span style="color: #56b6c2;">:inherit</span> ,face<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
'help-echo buffer-file-truename<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline--buffer-file-name-truncate</span> <span style="color: #61afef;">(</span><span style="color: #e5c07b;">&amp;optional</span> truncate-tail<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Propertized `</span><span style="color: #d19a66;">buffer-file-name</span><span style="color: #565c64;">' that truncates every dir along path.</span>
<span style="color: #565c64;">If TRUNCATE-TAIL is t also truncate the parent directory of the file."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>dirs <span style="color: #e5c07b;">(</span>shrink-path-prompt <span style="color: #d19a66;">(</span>file-name-directory buffer-file-truename<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>active <span style="color: #e5c07b;">(</span>active<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">if</span> <span style="color: #98c379;">(</span>null dirs<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>propertize <span style="color: #98c379;">"%b"</span> 'face <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> active 'doom-modeline-buffer-file<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">let</span> <span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>modified-faces <span style="color: #e06c75;">(</span><span style="color: #c678dd;">if</span> <span style="color: #545862;">(</span>buffer-modified-p<span style="color: #545862;">)</span> 'doom-modeline-buffer-modified<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">let</span> <span style="color: #d19a66;">(</span><span style="color: #e06c75;">(</span>dirname <span style="color: #545862;">(</span>car dirs<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>basename <span style="color: #545862;">(</span>cdr dirs<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>dir-faces <span style="color: #545862;">(</span><span style="color: #c678dd;">or</span> modified-faces <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">if</span> active 'doom-modeline-project-root-dir<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>file-faces <span style="color: #545862;">(</span><span style="color: #c678dd;">or</span> modified-faces <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">if</span> active 'doom-modeline-buffer-file<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>concat <span style="color: #e06c75;">(</span>propertize <span style="color: #545862;">(</span>concat dirname
<span style="color: #abb2bf;">(</span><span style="color: #c678dd;">if</span> truncate-tail <span style="color: #c678dd;">(</span>substring basename 0 1<span style="color: #c678dd;">)</span> basename<span style="color: #abb2bf;">)</span>
<span style="color: #98c379;">"/"</span><span style="color: #545862;">)</span>
'face <span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> dir-faces `<span style="color: #abb2bf;">(</span><span style="color: #56b6c2;">:inherit</span> ,dir-faces<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>propertize <span style="color: #545862;">(</span>file-name-nondirectory buffer-file-name<span style="color: #545862;">)</span>
'face <span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> file-faces `<span style="color: #abb2bf;">(</span><span style="color: #56b6c2;">:inherit</span> ,file-faces<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline--buffer-file-name-relative</span> <span style="color: #61afef;">(</span><span style="color: #e5c07b;">&amp;optional</span> include-project<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Propertized `</span><span style="color: #d19a66;">buffer-file-name</span><span style="color: #565c64;">' showing directories relative to project's root only."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>root <span style="color: #e5c07b;">(</span>projectile-project-root<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>active <span style="color: #e5c07b;">(</span>active<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">if</span> <span style="color: #98c379;">(</span>null root<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>propertize <span style="color: #98c379;">"%b"</span> 'face <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> active 'doom-modeline-buffer-file<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">let*</span> <span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>modified-faces <span style="color: #e06c75;">(</span><span style="color: #c678dd;">if</span> <span style="color: #545862;">(</span>buffer-modified-p<span style="color: #545862;">)</span> 'doom-modeline-buffer-modified<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>relative-dirs <span style="color: #e06c75;">(</span>file-relative-name <span style="color: #545862;">(</span>file-name-directory buffer-file-truename<span style="color: #545862;">)</span>
<span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> include-project <span style="color: #abb2bf;">(</span>concat root <span style="color: #98c379;">"../"</span><span style="color: #abb2bf;">)</span> root<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>relative-faces <span style="color: #e06c75;">(</span><span style="color: #c678dd;">or</span> modified-faces <span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> active 'doom-modeline-buffer-path<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>file-faces <span style="color: #e06c75;">(</span><span style="color: #c678dd;">or</span> modified-faces <span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> active 'doom-modeline-buffer-file<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> <span style="color: #d19a66;">(</span>equal <span style="color: #98c379;">"./"</span> relative-dirs<span style="color: #d19a66;">)</span> <span style="color: #d19a66;">(</span><span style="color: #c678dd;">setq</span> relative-dirs <span style="color: #98c379;">""</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>concat <span style="color: #d19a66;">(</span>propertize relative-dirs 'face <span style="color: #e06c75;">(</span><span style="color: #c678dd;">if</span> relative-faces `<span style="color: #545862;">(</span><span style="color: #56b6c2;">:inherit</span> ,relative-faces<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>propertize <span style="color: #e06c75;">(</span>file-name-nondirectory buffer-file-truename<span style="color: #e06c75;">)</span>
'face <span style="color: #e06c75;">(</span><span style="color: #c678dd;">if</span> file-faces `<span style="color: #545862;">(</span><span style="color: #56b6c2;">:inherit</span> ,file-faces<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline--buffer-file-name</span> <span style="color: #61afef;">(</span>truncate-project-root-parent<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Propertized `</span><span style="color: #d19a66;">buffer-file-name</span><span style="color: #565c64;">'.</span>
<span style="color: #565c64;">If TRUNCATE-PROJECT-ROOT-PARENT is t space will be saved by truncating it down</span>
<span style="color: #565c64;">fish-shell style.</span>
<span style="color: #565c64;">Example:</span>
<span style="color: #565c64;">~/Projects/FOSS/emacs/lisp/comint.el =&gt; ~/P/F/emacs/lisp/comint.el"</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let*</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>project-root <span style="color: #e5c07b;">(</span>projectile-project-root<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>file-name-split <span style="color: #e5c07b;">(</span>shrink-path-file-mixed project-root
<span style="color: #d19a66;">(</span>file-name-directory buffer-file-truename<span style="color: #d19a66;">)</span>
buffer-file-truename<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>active <span style="color: #e5c07b;">(</span>active<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">if</span> <span style="color: #98c379;">(</span>null file-name-split<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>propertize <span style="color: #98c379;">"%b"</span> 'face <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> active 'doom-modeline-buffer-file<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">pcase-let</span> <span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>`<span style="color: #e06c75;">(</span>,root-path-parent ,project ,relative-path ,filename<span style="color: #e06c75;">)</span> file-name-split<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">let</span> <span style="color: #d19a66;">(</span><span style="color: #e06c75;">(</span>modified-faces <span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> <span style="color: #abb2bf;">(</span>buffer-modified-p<span style="color: #abb2bf;">)</span> 'doom-modeline-buffer-modified<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span><span style="color: #c678dd;">let</span> <span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>sp-faces <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">or</span> modified-faces <span style="color: #c678dd;">(</span><span style="color: #c678dd;">if</span> active 'font-lock-comment-face<span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>project-faces <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">or</span> modified-faces <span style="color: #c678dd;">(</span><span style="color: #c678dd;">if</span> active 'font-lock-string-face<span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>relative-faces <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">or</span> modified-faces <span style="color: #c678dd;">(</span><span style="color: #c678dd;">if</span> active 'doom-modeline-buffer-path<span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>file-faces <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">or</span> modified-faces <span style="color: #c678dd;">(</span><span style="color: #c678dd;">if</span> active 'doom-modeline-buffer-file<span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span><span style="color: #c678dd;">let</span> <span style="color: #545862;">(</span><span style="color: #abb2bf;">(</span>sp-props `<span style="color: #c678dd;">(</span>,@<span style="color: #61afef;">(</span><span style="color: #c678dd;">if</span> sp-faces `<span style="color: #56b6c2;">(</span><span style="color: #56b6c2;">:inherit</span> ,sp-faces<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span> ,@<span style="color: #61afef;">(</span><span style="color: #c678dd;">if</span> active '<span style="color: #56b6c2;">(</span><span style="color: #56b6c2;">:weight</span> bold<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span>project-props `<span style="color: #c678dd;">(</span>,@<span style="color: #61afef;">(</span><span style="color: #c678dd;">if</span> project-faces `<span style="color: #56b6c2;">(</span><span style="color: #56b6c2;">:inherit</span> ,project-faces<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span> ,@<span style="color: #61afef;">(</span><span style="color: #c678dd;">if</span> active '<span style="color: #56b6c2;">(</span><span style="color: #56b6c2;">:weight</span> bold<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span>relative-props `<span style="color: #c678dd;">(</span>,@<span style="color: #61afef;">(</span><span style="color: #c678dd;">if</span> relative-faces `<span style="color: #56b6c2;">(</span><span style="color: #56b6c2;">:inherit</span> ,relative-faces<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span>file-props `<span style="color: #c678dd;">(</span>,@<span style="color: #61afef;">(</span><span style="color: #c678dd;">if</span> file-faces `<span style="color: #56b6c2;">(</span><span style="color: #56b6c2;">:inherit</span> ,file-faces<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>concat <span style="color: #abb2bf;">(</span>propertize <span style="color: #c678dd;">(</span><span style="color: #c678dd;">if</span> truncate-project-root-parent
root-path-parent
<span style="color: #61afef;">(</span>abbreviate-file-name project-root<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
'face sp-props<span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span>propertize <span style="color: #c678dd;">(</span>concat project <span style="color: #98c379;">"/"</span><span style="color: #c678dd;">)</span> 'face project-props<span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span><span style="color: #c678dd;">if</span> relative-path <span style="color: #c678dd;">(</span>propertize relative-path 'face relative-props<span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span>propertize filename 'face file-props<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Segments</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline-segment!</span> buffer-default-directory
<span style="color: #565c64;">"Displays `</span><span style="color: #d19a66;">default-directory</span><span style="color: #565c64;">'. This is for special buffers like the scratch</span>
<span style="color: #565c64;">buffer where knowing the current project directory is important."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>face <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> <span style="color: #d19a66;">(</span>active<span style="color: #d19a66;">)</span> 'doom-modeline-buffer-path<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>concat <span style="color: #98c379;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e5c07b;">(</span>display-graphic-p<span style="color: #e5c07b;">)</span> <span style="color: #98c379;">" "</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>all-the-icons-octicon
<span style="color: #98c379;">"file-directory"</span>
<span style="color: #56b6c2;">:face</span> face
<span style="color: #56b6c2;">:v-adjust</span> -0.05
<span style="color: #56b6c2;">:height</span> 1.25<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>propertize <span style="color: #e5c07b;">(</span>concat <span style="color: #98c379;">" "</span> <span style="color: #d19a66;">(</span>abbreviate-file-name default-directory<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
'face face<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline-segment!</span> buffer-info
<span style="color: #565c64;">"Combined information about the current buffer, including the current working</span>
<span style="color: #565c64;">directory, the file name, and its state (modified, read-only or non-existent)."</span>
<span style="color: #61afef;">(</span>concat <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #98c379;">(</span>buffer-read-only
<span style="color: #e5c07b;">(</span>concat <span style="color: #d19a66;">(</span>all-the-icons-octicon
<span style="color: #98c379;">"lock"</span>
<span style="color: #56b6c2;">:face</span> 'doom-modeline-warning
<span style="color: #56b6c2;">:v-adjust</span> -0.05<span style="color: #d19a66;">)</span>
<span style="color: #98c379;">" "</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>buffer-modified-p<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>concat <span style="color: #d19a66;">(</span>all-the-icons-faicon
<span style="color: #98c379;">"floppy-o"</span>
<span style="color: #56b6c2;">:face</span> 'doom-modeline-buffer-modified
<span style="color: #56b6c2;">:v-adjust</span> -0.0575<span style="color: #d19a66;">)</span>
<span style="color: #98c379;">" "</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span><span style="color: #c678dd;">and</span> buffer-file-name
<span style="color: #d19a66;">(</span>not <span style="color: #e06c75;">(</span>file-exists-p buffer-file-name<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>concat <span style="color: #d19a66;">(</span>all-the-icons-octicon
<span style="color: #98c379;">"circle-slash"</span>
<span style="color: #56b6c2;">:face</span> 'doom-modeline-urgent
<span style="color: #56b6c2;">:v-adjust</span> -0.05<span style="color: #d19a66;">)</span>
<span style="color: #98c379;">" "</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>buffer-narrowed-p<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>concat <span style="color: #d19a66;">(</span>all-the-icons-octicon
<span style="color: #98c379;">"fold"</span>
<span style="color: #56b6c2;">:face</span> 'doom-modeline-warning
<span style="color: #56b6c2;">:v-adjust</span> -0.05<span style="color: #d19a66;">)</span>
<span style="color: #98c379;">" "</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">if</span> buffer-file-name
<span style="color: #98c379;">(</span>+doom-modeline-buffer-file-name<span style="color: #98c379;">)</span>
<span style="color: #98c379;">"%b"</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline-segment!</span> buffer-info-simple
<span style="color: #565c64;">"Display only the current buffer's name, but with fontification."</span>
<span style="color: #61afef;">(</span>propertize
<span style="color: #98c379;">"%b"</span>
'face <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span><span style="color: #c678dd;">and</span> buffer-file-name <span style="color: #d19a66;">(</span>buffer-modified-p<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
'doom-modeline-buffer-modified<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>active<span style="color: #e5c07b;">)</span> 'doom-modeline-buffer-file<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline-segment!</span> buffer-encoding
<span style="color: #565c64;">"Displays the encoding and eol style of the buffer the same way Atom does."</span>
<span style="color: #61afef;">(</span>concat <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">pcase</span> <span style="color: #98c379;">(</span>coding-system-eol-type buffer-file-coding-system<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>0 <span style="color: #98c379;">"LF "</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>1 <span style="color: #98c379;">"CRLF "</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>2 <span style="color: #98c379;">"CR "</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>sys <span style="color: #d19a66;">(</span>coding-system-plist buffer-file-coding-system<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>memq <span style="color: #e06c75;">(</span>plist-get sys <span style="color: #56b6c2;">:category</span><span style="color: #e06c75;">)</span> '<span style="color: #e06c75;">(</span>coding-category-undecided coding-category-utf-8<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #98c379;">"UTF-8"</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>t <span style="color: #d19a66;">(</span>upcase <span style="color: #e06c75;">(</span>symbol-name <span style="color: #545862;">(</span>plist-get sys <span style="color: #56b6c2;">:name</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #98c379;">" "</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline-segment!</span> major-mode
<span style="color: #565c64;">"The major mode, including process, environment and text-scale info."</span>
<span style="color: #61afef;">(</span>propertize
<span style="color: #56b6c2;">(</span>concat <span style="color: #98c379;">(</span>format-mode-line mode-name<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">when</span> <span style="color: #e5c07b;">(</span>stringp mode-line-process<span style="color: #e5c07b;">)</span>
mode-line-process<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">and</span> <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">featurep</span> '<span style="color: #d19a66;">face-remap</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>/= text-scale-mode-amount 0<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>format <span style="color: #98c379;">" (%+d)"</span> text-scale-mode-amount<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
'face <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">if</span> <span style="color: #98c379;">(</span>active<span style="color: #98c379;">)</span> 'doom-modeline-buffer-major-mode<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline-segment!</span> vcs
<span style="color: #565c64;">"Displays the current branch, colored based on its state."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when</span> <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">and</span> vc-mode buffer-file-name<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let*</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>backend <span style="color: #d19a66;">(</span>vc-backend buffer-file-name<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>state <span style="color: #d19a66;">(</span>vc-state buffer-file-name backend<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">let</span> <span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>face 'mode-line-inactive<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>active <span style="color: #e06c75;">(</span>active<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>all-the-icons-default-adjust -0.1<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>concat <span style="color: #98c379;">" "</span>
<span style="color: #d19a66;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>memq state '<span style="color: #abb2bf;">(</span>edited added<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> active <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">setq</span> face 'doom-modeline-info<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>all-the-icons-octicon
<span style="color: #98c379;">"git-compare"</span>
<span style="color: #56b6c2;">:face</span> face
<span style="color: #56b6c2;">:v-adjust</span> -0.05<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>eq state 'needs-merge<span style="color: #545862;">)</span>
<span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> active <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">setq</span> face 'doom-modeline-info<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>all-the-icons-octicon <span style="color: #98c379;">"git-merge"</span> <span style="color: #56b6c2;">:face</span> face<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>eq state 'needs-update<span style="color: #545862;">)</span>
<span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> active <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">setq</span> face 'doom-modeline-warning<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>all-the-icons-octicon <span style="color: #98c379;">"arrow-down"</span> <span style="color: #56b6c2;">:face</span> face<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>memq state '<span style="color: #abb2bf;">(</span>removed conflict unregistered<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> active <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">setq</span> face 'doom-modeline-urgent<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>all-the-icons-octicon <span style="color: #98c379;">"alert"</span> <span style="color: #56b6c2;">:face</span> face<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>t
<span style="color: #545862;">(</span><span style="color: #c678dd;">if</span> active <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">setq</span> face 'font-lock-doc-face<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>all-the-icons-octicon
<span style="color: #98c379;">"git-compare"</span>
<span style="color: #56b6c2;">:face</span> face
<span style="color: #56b6c2;">:v-adjust</span> -0.05<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #98c379;">" "</span>
<span style="color: #d19a66;">(</span>propertize <span style="color: #e06c75;">(</span>substring vc-mode <span style="color: #545862;">(</span>+ <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">if</span> <span style="color: #c678dd;">(</span>eq backend 'Hg<span style="color: #c678dd;">)</span> 2 3<span style="color: #abb2bf;">)</span> 2<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
'face <span style="color: #e06c75;">(</span><span style="color: #c678dd;">if</span> active face<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #98c379;">" "</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-ml-icon</span> <span style="color: #61afef;">(</span>icon <span style="color: #e5c07b;">&amp;optional</span> text face voffset<span style="color: #61afef;">)</span>
<span style="color: #565c64;">"Displays an octicon ICON with FACE, followed by TEXT. Uses</span>
<span style="color: #565c64;">`</span><span style="color: #d19a66;">all-the-icons-octicon</span><span style="color: #565c64;">' to fetch the icon."</span>
<span style="color: #61afef;">(</span>concat <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">if</span> vc-mode <span style="color: #98c379;">" "</span> <span style="color: #98c379;">" "</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">when</span> icon
<span style="color: #98c379;">(</span>concat
<span style="color: #e5c07b;">(</span>all-the-icons-material icon <span style="color: #56b6c2;">:face</span> face <span style="color: #56b6c2;">:height</span> 1.1 <span style="color: #56b6c2;">:v-adjust</span> <span style="color: #d19a66;">(</span><span style="color: #c678dd;">or</span> voffset -0.2<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> text +doom-modeline-vspc<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">when</span> text
<span style="color: #98c379;">(</span>propertize text 'face face<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">if</span> vc-mode <span style="color: #98c379;">" "</span> <span style="color: #98c379;">" "</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline-segment!</span> flycheck
<span style="color: #565c64;">"Displays color-coded flycheck error status in the current buffer with pretty</span>
<span style="color: #565c64;">icons."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when</span> <span style="color: #56b6c2;">(</span>boundp 'flycheck-last-status-change<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">pcase</span> flycheck-last-status-change
<span style="color: #98c379;">(</span>'finished <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> flycheck-current-errors
<span style="color: #d19a66;">(</span><span style="color: #c678dd;">let-alist</span> <span style="color: #e06c75;">(</span>flycheck-count-errors flycheck-current-errors<span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span><span style="color: #c678dd;">let</span> <span style="color: #545862;">(</span><span style="color: #abb2bf;">(</span>sum <span style="color: #c678dd;">(</span>+ <span style="color: #61afef;">(</span><span style="color: #c678dd;">or</span> .error 0<span style="color: #61afef;">)</span> <span style="color: #61afef;">(</span><span style="color: #c678dd;">or</span> .warning 0<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>+doom-ml-icon <span style="color: #98c379;">"do_not_disturb_alt"</span>
<span style="color: #abb2bf;">(</span>number-to-string sum<span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span><span style="color: #c678dd;">if</span> .error 'doom-modeline-urgent 'doom-modeline-warning<span style="color: #abb2bf;">)</span>
-0.25<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>+doom-ml-icon <span style="color: #98c379;">"check"</span> nil 'doom-modeline-info<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>'running <span style="color: #e5c07b;">(</span>+doom-ml-icon <span style="color: #98c379;">"access_time"</span> nil 'font-lock-doc-face -0.25<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>'no-checker <span style="color: #e5c07b;">(</span>+doom-ml-icon <span style="color: #98c379;">"sim_card_alert"</span> <span style="color: #98c379;">"-"</span> 'font-lock-doc-face<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>'errored <span style="color: #e5c07b;">(</span>+doom-ml-icon <span style="color: #98c379;">"sim_card_alert"</span> <span style="color: #98c379;">"Error"</span> 'doom-modeline-urgent<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>'interrupted <span style="color: #e5c07b;">(</span>+doom-ml-icon <span style="color: #98c379;">"pause"</span> <span style="color: #98c379;">"Interrupted"</span> 'font-lock-doc-face<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">('interrupted (+doom-ml-icon "x" "Interrupted" 'font-lock-doc-face)))))</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defsubst</span> <span style="color: #61afef;">doom-column</span> <span style="color: #61afef;">(</span>pos<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">save-excursion</span> <span style="color: #56b6c2;">(</span>goto-char pos<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>current-column<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline-segment!</span> selection-info
<span style="color: #565c64;">"Information about the current selection, such as how many characters and</span>
<span style="color: #565c64;">lines are selected, or the NxM dimensions of a block selection."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when</span> <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">and</span> <span style="color: #98c379;">(</span>active<span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span><span style="color: #c678dd;">or</span> mark-active <span style="color: #e5c07b;">(</span>eq evil-state 'visual<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>reg-beg <span style="color: #d19a66;">(</span>region-beginning<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>reg-end <span style="color: #d19a66;">(</span>region-end<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>propertize
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">let</span> <span style="color: #d19a66;">(</span><span style="color: #e06c75;">(</span>lines <span style="color: #545862;">(</span>count-lines reg-beg <span style="color: #abb2bf;">(</span>min <span style="color: #c678dd;">(</span>1+ reg-end<span style="color: #c678dd;">)</span> <span style="color: #c678dd;">(</span>point-max<span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #e06c75;">(</span><span style="color: #545862;">(</span><span style="color: #c678dd;">or</span> <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">bound-and-true-p</span> rectangle-mark-mode<span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span>eq 'block evil-visual-selection<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span><span style="color: #c678dd;">let</span> <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">(</span>cols <span style="color: #61afef;">(</span>abs <span style="color: #56b6c2;">(</span>- <span style="color: #98c379;">(</span>doom-column reg-end<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>doom-column reg-beg<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span>format <span style="color: #98c379;">"%dx%dB"</span> lines cols<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>eq 'line evil-visual-selection<span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>format <span style="color: #98c379;">"%dL"</span> lines<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span><span style="color: #545862;">(</span>&gt; lines 1<span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>format <span style="color: #98c379;">"%dC %dL"</span> <span style="color: #abb2bf;">(</span>- <span style="color: #c678dd;">(</span>1+ reg-end<span style="color: #c678dd;">)</span> reg-beg<span style="color: #abb2bf;">)</span> lines<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>t
<span style="color: #545862;">(</span>format <span style="color: #98c379;">"%dC"</span> <span style="color: #abb2bf;">(</span>- <span style="color: #c678dd;">(</span>1+ reg-end<span style="color: #c678dd;">)</span> reg-beg<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
'face 'doom-modeline-highlight<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline--macro-recording</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Display current Emacs or evil macro being recorded."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when</span> <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">and</span> <span style="color: #98c379;">(</span>active<span style="color: #98c379;">)</span> <span style="color: #98c379;">(</span><span style="color: #c678dd;">or</span> defining-kbd-macro executing-kbd-macro<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">let</span> <span style="color: #98c379;">(</span><span style="color: #e5c07b;">(</span>sep <span style="color: #d19a66;">(</span>propertize <span style="color: #98c379;">" "</span> 'face 'doom-modeline-panel<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span>concat sep
<span style="color: #e5c07b;">(</span>propertize <span style="color: #d19a66;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e06c75;">(</span><span style="color: #c678dd;">bound-and-true-p</span> evil-this-macro<span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>char-to-string evil-this-macro<span style="color: #e06c75;">)</span>
<span style="color: #98c379;">"Macro"</span><span style="color: #d19a66;">)</span>
'face 'doom-modeline-panel<span style="color: #e5c07b;">)</span>
sep
<span style="color: #e5c07b;">(</span>all-the-icons-octicon <span style="color: #98c379;">"triangle-right"</span>
<span style="color: #56b6c2;">:face</span> 'doom-modeline-panel
<span style="color: #56b6c2;">:v-adjust</span> -0.05<span style="color: #e5c07b;">)</span>
sep<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defsubst</span> <span style="color: #61afef;">+doom-modeline--anzu</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Show the match index and total number thereof. Requires `</span><span style="color: #d19a66;">anzu</span><span style="color: #565c64;">', also</span>
<span style="color: #565c64;">`</span><span style="color: #d19a66;">evil-anzu</span><span style="color: #565c64;">' if using `</span><span style="color: #d19a66;">evil-mode</span><span style="color: #565c64;">' for compatibility with `</span><span style="color: #d19a66;">evil-search</span><span style="color: #565c64;">'."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when</span> <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">and</span> anzu--state <span style="color: #98c379;">(</span>not iedit-mode<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>propertize
<span style="color: #98c379;">(</span><span style="color: #c678dd;">let</span> <span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>here anzu--current-position<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>total anzu--total-matched<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #d19a66;">(</span><span style="color: #e06c75;">(</span>eq anzu--state 'replace-query<span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>format <span style="color: #98c379;">" %d replace "</span> total<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span><span style="color: #e06c75;">(</span>eq anzu--state 'replace<span style="color: #e06c75;">)</span>
<span style="color: #e06c75;">(</span>format <span style="color: #98c379;">" %d/%d "</span> here total<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>anzu--overflow-p
<span style="color: #e06c75;">(</span>format <span style="color: #98c379;">" %s+ "</span> total<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>t
<span style="color: #e06c75;">(</span>format <span style="color: #98c379;">" %s/%d "</span> here total<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
'face <span style="color: #98c379;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e5c07b;">(</span>active<span style="color: #e5c07b;">)</span> 'doom-modeline-panel<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defsubst</span> <span style="color: #61afef;">+doom-modeline--evil-substitute</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Show number of matches for evil-ex substitutions and highlights in real time."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when</span> <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">and</span> evil-mode
<span style="color: #98c379;">(</span><span style="color: #c678dd;">or</span> <span style="color: #e5c07b;">(</span>assq 'evil-ex-substitute evil-ex-active-highlights-alist<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>assq 'evil-ex-global-match evil-ex-active-highlights-alist<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>assq 'evil-ex-buffer-match evil-ex-active-highlights-alist<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>propertize
<span style="color: #98c379;">(</span><span style="color: #c678dd;">let</span> <span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>range <span style="color: #e06c75;">(</span><span style="color: #c678dd;">if</span> evil-ex-range
<span style="color: #545862;">(</span>cons <span style="color: #abb2bf;">(</span>car evil-ex-range<span style="color: #abb2bf;">)</span> <span style="color: #abb2bf;">(</span>cadr evil-ex-range<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span>cons <span style="color: #abb2bf;">(</span>line-beginning-position<span style="color: #abb2bf;">)</span> <span style="color: #abb2bf;">(</span>line-end-position<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>pattern <span style="color: #e06c75;">(</span>car-safe <span style="color: #545862;">(</span>evil-delimited-arguments evil-ex-argument 2<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> pattern
<span style="color: #d19a66;">(</span>format <span style="color: #98c379;">" %s matches "</span> <span style="color: #e06c75;">(</span>how-many pattern <span style="color: #545862;">(</span>car range<span style="color: #545862;">)</span> <span style="color: #545862;">(</span>cdr range<span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #98c379;">" - "</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
'face <span style="color: #98c379;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e5c07b;">(</span>active<span style="color: #e5c07b;">)</span> 'doom-modeline-panel<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">doom-themes--overlay-sort</span> <span style="color: #61afef;">(</span>a b<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>&lt; <span style="color: #56b6c2;">(</span>overlay-start a<span style="color: #56b6c2;">)</span> <span style="color: #56b6c2;">(</span>overlay-start b<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defsubst</span> <span style="color: #61afef;">+doom-modeline--iedit</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Show the number of iedit regions matches + what match you're on."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">when</span> <span style="color: #56b6c2;">(</span><span style="color: #c678dd;">and</span> iedit-mode iedit-occurrences-overlays<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>propertize
<span style="color: #98c379;">(</span><span style="color: #c678dd;">let</span> <span style="color: #e5c07b;">(</span><span style="color: #d19a66;">(</span>this-oc <span style="color: #e06c75;">(</span><span style="color: #c678dd;">or</span> <span style="color: #545862;">(</span><span style="color: #c678dd;">let</span> <span style="color: #abb2bf;">(</span><span style="color: #c678dd;">(</span>inhibit-message t<span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span>iedit-find-current-occurrence-overlay<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
<span style="color: #545862;">(</span><span style="color: #c678dd;">progn</span> <span style="color: #abb2bf;">(</span>iedit-prev-occurrence<span style="color: #abb2bf;">)</span>
<span style="color: #abb2bf;">(</span>iedit-find-current-occurrence-overlay<span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span><span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>length <span style="color: #e06c75;">(</span>length iedit-occurrences-overlays<span style="color: #e06c75;">)</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>format <span style="color: #98c379;">" %s/%d "</span>
<span style="color: #d19a66;">(</span><span style="color: #c678dd;">if</span> this-oc
<span style="color: #e06c75;">(</span>- length
<span style="color: #545862;">(</span>length <span style="color: #abb2bf;">(</span>memq this-oc <span style="color: #c678dd;">(</span>sort <span style="color: #61afef;">(</span>append iedit-occurrences-overlays nil<span style="color: #61afef;">)</span>
#'doom-themes--overlay-sort<span style="color: #c678dd;">)</span><span style="color: #abb2bf;">)</span><span style="color: #545862;">)</span>
-1<span style="color: #e06c75;">)</span>
<span style="color: #98c379;">"-"</span><span style="color: #d19a66;">)</span>
length<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span>
'face <span style="color: #98c379;">(</span><span style="color: #c678dd;">if</span> <span style="color: #e5c07b;">(</span>active<span style="color: #e5c07b;">)</span> 'doom-modeline-panel<span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline-segment!</span> matches
<span style="color: #565c64;">"Displays: 1. the currently recording macro, 2. A current/total for the</span>
<span style="color: #565c64;">current search term (with anzu), 3. The number of substitutions being conducted</span>
<span style="color: #565c64;">with `</span><span style="color: #d19a66;">evil-ex-substitute</span><span style="color: #565c64;">', and/or 4. The number of active `</span><span style="color: #d19a66;">iedit</span><span style="color: #565c64;">' regions."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">let</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>meta <span style="color: #e5c07b;">(</span>concat <span style="color: #d19a66;">(</span>+doom-modeline--macro-recording<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>+doom-modeline--anzu<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>+doom-modeline--evil-substitute<span style="color: #d19a66;">)</span>
<span style="color: #d19a66;">(</span>+doom-modeline--iedit<span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span><span style="color: #c678dd;">or</span> <span style="color: #98c379;">(</span><span style="color: #c678dd;">and</span> <span style="color: #e5c07b;">(</span>not <span style="color: #d19a66;">(</span>equal meta <span style="color: #98c379;">""</span><span style="color: #d19a66;">)</span><span style="color: #e5c07b;">)</span> meta<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">if</span> buffer-file-name <span style="color: #98c379;">" %I "</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">TODO Include other information</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline-segment!</span> media-info
<span style="color: #565c64;">"Metadata regarding the current file, such as dimensions for images."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">cond</span> <span style="color: #56b6c2;">(</span><span style="color: #98c379;">(</span>eq major-mode 'image-mode<span style="color: #98c379;">)</span>
<span style="color: #98c379;">(</span><span style="color: #c678dd;">cl-destructuring-bind</span> <span style="color: #e5c07b;">(</span>width . height<span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>image-size <span style="color: #d19a66;">(</span>image-get-display-property<span style="color: #d19a66;">)</span> <span style="color: #56b6c2;">:pixels</span><span style="color: #e5c07b;">)</span>
<span style="color: #e5c07b;">(</span>format <span style="color: #98c379;">" %dx%d "</span> width height<span style="color: #e5c07b;">)</span><span style="color: #98c379;">)</span><span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline-segment!</span> bar
<span style="color: #565c64;">"The bar regulates the height of the mode-line in GUI Emacs.</span>
<span style="color: #565c64;">Returns \"\" to not break --no-window-system."</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">if</span> <span style="color: #56b6c2;">(</span>display-graphic-p<span style="color: #56b6c2;">)</span>
<span style="color: #56b6c2;">(</span>+doom-modeline--make-xpm
<span style="color: #98c379;">(</span>face-background <span style="color: #e5c07b;">(</span><span style="color: #c678dd;">if</span> <span style="color: #d19a66;">(</span>active<span style="color: #d19a66;">)</span>
'doom-modeline-bar
'doom-modeline-inactive-bar<span style="color: #e5c07b;">)</span>
nil t<span style="color: #98c379;">)</span>
+doom-modeline-height
+doom-modeline-bar-width<span style="color: #56b6c2;">)</span>
<span style="color: #98c379;">""</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Mode lines</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline!</span> main
<span style="color: #61afef;">(</span>bar matches <span style="color: #98c379;">" "</span> buffer-info <span style="color: #98c379;">" %l:%c %p "</span> selection-info<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>buffer-encoding major-mode vcs flycheck<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline!</span> minimal
<span style="color: #61afef;">(</span>bar matches <span style="color: #98c379;">" "</span> buffer-info<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>media-info major-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline!</span> special
<span style="color: #61afef;">(</span>bar matches <span style="color: #98c379;">" "</span> buffer-info-simple <span style="color: #98c379;">" %l:%c %p "</span> selection-info<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>buffer-encoding major-mode flycheck<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline!</span> project
<span style="color: #61afef;">(</span>bar buffer-default-directory<span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>major-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">def-modeline!</span> media
<span style="color: #61afef;">(</span>bar <span style="color: #98c379;">" %b "</span><span style="color: #61afef;">)</span>
<span style="color: #61afef;">(</span>media-info major-mode<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Hooks</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline|init</span> <span style="color: #61afef;">()</span>
<span style="color: #565c64;">"Set the default modeline."</span>
<span style="color: #61afef;">(</span>doom-set-modeline 'main t<span style="color: #61afef;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">This scratch buffer is already created and doesn't get a modeline. For the</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">love of Emacs, someone give the man a modeline!</span>
<span style="color: #61afef;">(</span><span style="color: #c678dd;">with-current-buffer</span> <span style="color: #98c379;">"*scratch*"</span>
<span style="color: #56b6c2;">(</span>doom-set-modeline 'main<span style="color: #56b6c2;">)</span><span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline|set-special-modeline</span> <span style="color: #61afef;">()</span>
<span style="color: #61afef;">(</span>doom-set-modeline 'special<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline|set-media-modeline</span> <span style="color: #61afef;">()</span>
<span style="color: #61afef;">(</span>doom-set-modeline 'media<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span><span style="color: #c678dd;">defun</span> <span style="color: #61afef;">+doom-modeline|set-project-modeline</span> <span style="color: #61afef;">()</span>
<span style="color: #61afef;">(</span>doom-set-modeline 'project<span style="color: #61afef;">)</span><span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">Bootstrap</span>
<span style="color: #3e4451;">;;</span>
<span style="color: #c678dd;">(</span>add-hook 'emacs-startup-hook #'+doom-modeline|init<span style="color: #c678dd;">)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(add-hook 'doom-scratch-buffer-hook #'+doom-modeline|set-special-modeline)</span>
<span style="color: #3e4451;">;; </span><span style="color: #545862;">(add-hook '+doom-dashboard-mode-hook #'+doom-modeline|set-project-modeline)</span>
<span style="color: #c678dd;">(</span>add-hook 'image-mode-hook #'+doom-modeline|set-media-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'org-src-mode-hook #'+doom-modeline|set-special-modeline<span style="color: #c678dd;">)</span>
<span style="color: #c678dd;">(</span>add-hook 'circe-mode-hook #'+doom-modeline|set-special-modeline<span style="color: #c678dd;">)</span>
</pre>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="date">Date: 2019-01-30 Wed 00:00</p>
<p class="author">Author: Levi Olson</p>
<p class="date">Created: 2019-02-13 Wed 14:20</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>