(Emacs/config)-WAIT sections that I definitely don't plan to use
Unlike the WAIT sections for programming languages, the things I've deleted have been superseded by other parts of my config.
This commit is contained in:
@@ -74,52 +74,6 @@ Let's setup a few things:
|
|||||||
* Custom functionality
|
* Custom functionality
|
||||||
Some Lisp I wrote that only depends on Emacs to provide some custom
|
Some Lisp I wrote that only depends on Emacs to provide some custom
|
||||||
functionality.
|
functionality.
|
||||||
** WAIT Toggle buffer
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
Like VSCode's toggling feature for just the terminal but now for
|
|
||||||
any buffer of choice, as long as I can generate it via a command.
|
|
||||||
|
|
||||||
2024-04-23: Don't need this anymore due to
|
|
||||||
~switch-to-buffer-obey-display-actions~.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(with-eval-after-load "window"
|
|
||||||
(defmacro +oreo/create-toggle-function (func-name buf-name
|
|
||||||
buf-create
|
|
||||||
&optional accept-numeric)
|
|
||||||
"Generate a function named FUNC-NAME that toggles the buffer with
|
|
||||||
name BUF-NAME, using BUF-CREATE to generate it if buffer BUF-NAME
|
|
||||||
does not exist already.
|
|
||||||
|
|
||||||
BUF-NAME cannot be a regexp, it must be a fixed name.
|
|
||||||
|
|
||||||
ACCEPT-NUMERIC modifies the function to allow numeric arguments
|
|
||||||
via C-u. Mostly used in Eshell."
|
|
||||||
(let ((interactive-arg
|
|
||||||
(if accept-numeric '(interactive "p") '(interactive)))
|
|
||||||
(arguments
|
|
||||||
(if accept-numeric '(&optional arg) nil))
|
|
||||||
(buffer-name (if accept-numeric
|
|
||||||
`(if (= arg 1)
|
|
||||||
,buf-name
|
|
||||||
(concat ,buf-name "<" (int-to-string arg) ">"))
|
|
||||||
buf-name))
|
|
||||||
(buffer-create (if accept-numeric
|
|
||||||
`(if (= arg 1)
|
|
||||||
(,buf-create)
|
|
||||||
(,buf-create arg))
|
|
||||||
`(,buf-create))))
|
|
||||||
`(defun ,func-name ,arguments
|
|
||||||
,interactive-arg
|
|
||||||
(let* ((buffer (or (get-buffer ,buffer-name)
|
|
||||||
,buffer-create))
|
|
||||||
(displayed (get-buffer-window buffer)))
|
|
||||||
(if displayed
|
|
||||||
(delete-window displayed)
|
|
||||||
(display-buffer buffer)
|
|
||||||
(select-window (get-buffer-window buffer))))))))
|
|
||||||
#+end_src
|
|
||||||
** Automatically run a command on saving
|
** Automatically run a command on saving
|
||||||
Define a macro which creates hooks into the ~after-save-hook~. On
|
Define a macro which creates hooks into the ~after-save-hook~. On
|
||||||
certain ~conditions~ being met, ~to-run~ is evaluated.
|
certain ~conditions~ being met, ~to-run~ is evaluated.
|
||||||
@@ -765,87 +719,6 @@ Setup for counsel. Load after ivy and helpful.
|
|||||||
(t . ivy--regex-ignore-order)))
|
(t . ivy--regex-ignore-order)))
|
||||||
(counsel-mode 1))
|
(counsel-mode 1))
|
||||||
#+end_src
|
#+end_src
|
||||||
**** WAIT Ivy posframe
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
This makes ivy minibuffer windows use child frames.
|
|
||||||
Very nice eyecandy, but can get kinda annoying.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package ivy-posframe
|
|
||||||
:hook (ivy-mode-hook . ivy-posframe-mode)
|
|
||||||
:straight t
|
|
||||||
:init
|
|
||||||
(setq ivy-posframe-parameters
|
|
||||||
'((left-fringe . 0)
|
|
||||||
(right-fringe . 0)
|
|
||||||
(background-color . "grey7")))
|
|
||||||
|
|
||||||
(setq ivy-posframe-display-functions-alist
|
|
||||||
'((t . ivy-posframe-display-at-window-center))))
|
|
||||||
#+end_src
|
|
||||||
**** WAIT Counsel etags
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
Counsel etags allows me to search generated tag files for tags. I
|
|
||||||
already have a function defined to generate the tags, so it's just
|
|
||||||
searching them which I find to be a bit of a hassle, and where this
|
|
||||||
package comes in.
|
|
||||||
|
|
||||||
This has been replaced by [[*xref][xref]] which is inbuilt.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package counsel-etags
|
|
||||||
:after counsel
|
|
||||||
:general
|
|
||||||
(search-leader
|
|
||||||
"t" #'counsel-etags-find-tag))
|
|
||||||
#+end_src
|
|
||||||
*** WAIT Ido
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
Ido is a very old completion package that still works great to this
|
|
||||||
day. Though it is limited in its scope (and may thus be called a
|
|
||||||
completion add-on rather than a full on framework), it is still a very
|
|
||||||
powerful package. With the use of ido-completing-read+, it may be used
|
|
||||||
similarly to a fully fledged completion framework.
|
|
||||||
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package ido
|
|
||||||
:demand t
|
|
||||||
:general
|
|
||||||
(general-def
|
|
||||||
:keymaps '(ido-buffer-completion-map
|
|
||||||
ido-file-completion-map
|
|
||||||
ido-file-dir-completion-map
|
|
||||||
ido-common-completion-map)
|
|
||||||
(kbd "M-j") #'ido-next-match
|
|
||||||
(kbd "M-k") #'ido-prev-match
|
|
||||||
(kbd "C-x o") #'evil-window-up)
|
|
||||||
:init
|
|
||||||
(setq ido-decorations
|
|
||||||
(list "{" "}" " \n" " ..." "[" "]" " [No match]" " [Matched]"
|
|
||||||
" [Not readable]" " [Too big]" " [Confirm]")
|
|
||||||
completion-styles '(flex partial-completion intials emacs22))
|
|
||||||
(setq-default ido-enable-flex-matching t
|
|
||||||
ido-enable-dot-prefix t
|
|
||||||
ido-enable-regexp nil)
|
|
||||||
(with-eval-after-load "magit"
|
|
||||||
(setq magit-completing-read-function 'magit-ido-completing-read))
|
|
||||||
:config
|
|
||||||
(ido-mode)
|
|
||||||
(ido-everywhere))
|
|
||||||
#+end_src
|
|
||||||
**** Ido ubiquitous
|
|
||||||
Ido completing-read+ is a package that extends the ido package to work
|
|
||||||
with more text based functions.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package ido-completing-read+
|
|
||||||
:after ido
|
|
||||||
:config
|
|
||||||
(ido-ubiquitous-mode +1))
|
|
||||||
#+end_src
|
|
||||||
*** Amx
|
*** Amx
|
||||||
Amx is a fork of Smex that works to enhance the
|
Amx is a fork of Smex that works to enhance the
|
||||||
execute-extended-command interface. It also provides support for ido
|
execute-extended-command interface. It also provides support for ido
|
||||||
@@ -1102,32 +975,6 @@ with abstracting a few things away.
|
|||||||
("smon"
|
("smon"
|
||||||
(format-time-string "%B" (current-time)))))
|
(format-time-string "%B" (current-time)))))
|
||||||
#+end_src
|
#+end_src
|
||||||
*** WAIT Skeletons
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
Defines a macro for generating a skeleton + abbrev for a given mode.
|
|
||||||
Doesn't sanitise inputs because I assume callers are /rational/ actors
|
|
||||||
who would *only* use this for their top level Emacs config.
|
|
||||||
|
|
||||||
Honestly didn't find much use for this currently, so disabled.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package skeleton
|
|
||||||
:after abbrev
|
|
||||||
:config
|
|
||||||
(defmacro +autotyping/gen-skeleton-abbrev (mode abbrev &rest skeleton)
|
|
||||||
(let* ((table (intern (concat (symbol-name mode) "-abbrev-table")))
|
|
||||||
(skeleton-name (intern (concat "+skeleton/" (symbol-name mode) "/" abbrev))))
|
|
||||||
`(progn
|
|
||||||
(define-skeleton
|
|
||||||
,skeleton-name
|
|
||||||
""
|
|
||||||
,@skeleton)
|
|
||||||
(define-abbrev ,table
|
|
||||||
,abbrev
|
|
||||||
""
|
|
||||||
',skeleton-name)))))
|
|
||||||
#+end_src
|
|
||||||
*** Auto insert
|
*** Auto insert
|
||||||
Allows inserting text immediately upon creating a new buffer with a
|
Allows inserting text immediately upon creating a new buffer with a
|
||||||
given name. Supports skeletons for inserting text. To make it easier
|
given name. Supports skeletons for inserting text. To make it easier
|
||||||
@@ -1556,54 +1403,6 @@ directories particularly efficiently.
|
|||||||
Emacs is basically an operating system whose primary datatype is text.
|
Emacs is basically an operating system whose primary datatype is text.
|
||||||
Applications are interfaces/environments which serve a variety of
|
Applications are interfaces/environments which serve a variety of
|
||||||
purposes, but provide a lot of capability.
|
purposes, but provide a lot of capability.
|
||||||
** WAIT Dashboard
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
Dashboard creates a custom dashboard for Emacs that replaces the
|
|
||||||
initial startup screen in default Emacs. It has a lot of customising
|
|
||||||
options.
|
|
||||||
|
|
||||||
Unfortunately not that useful, many things are easier to invoke
|
|
||||||
directly such as recent files or project changing.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package dashboard
|
|
||||||
:straight t
|
|
||||||
:demand t
|
|
||||||
:general
|
|
||||||
(app-leader
|
|
||||||
"b" #'dashboard-refresh-buffer)
|
|
||||||
(:states '(normal motion emacs)
|
|
||||||
:keymaps 'dashboard-mode-map
|
|
||||||
"q" (proc (interactive) (kill-this-buffer)))
|
|
||||||
(nmmap
|
|
||||||
:keymaps 'dashboard-mode-map
|
|
||||||
"r" #'dashboard-jump-to-recent-files
|
|
||||||
"p" #'dashboard-jump-to-projects
|
|
||||||
"}" #'dashboard-next-section
|
|
||||||
"{" #'dashboard-previous-section)
|
|
||||||
:init
|
|
||||||
(setq initial-buffer-choice nil
|
|
||||||
dashboard-banner-logo-title "Oreomacs"
|
|
||||||
dashboard-center-content t
|
|
||||||
dashboard-set-init-info t
|
|
||||||
dashboard-startup-banner (no-littering-expand-etc-file-name "dashboard/logo.png")
|
|
||||||
dashboard-set-footer t
|
|
||||||
dashboard-set-navigator t
|
|
||||||
dashboard-items '((projects . 5)
|
|
||||||
(recents . 5))
|
|
||||||
dashboard-footer-messages (list
|
|
||||||
"Collecting parentheses..."
|
|
||||||
"Linking 'coffee_machine.o'..."
|
|
||||||
"Uploading ip to hacker named 4chan..."
|
|
||||||
"Dividing by zero..."
|
|
||||||
"Solving 3-sat..."
|
|
||||||
"Obtaining your health record..."
|
|
||||||
(format "Recompiling Emacs for the %dth time..." (random 1000))
|
|
||||||
"Escaping the cycle of samsara..."))
|
|
||||||
:config
|
|
||||||
(dashboard-setup-startup-hook))
|
|
||||||
#+end_src
|
|
||||||
** EWW
|
** EWW
|
||||||
Emacs Web Wowser is the inbuilt text based web browser for Emacs. It
|
Emacs Web Wowser is the inbuilt text based web browser for Emacs. It
|
||||||
can render images and basic CSS styles but doesn't have a JavaScript
|
can render images and basic CSS styles but doesn't have a JavaScript
|
||||||
@@ -1841,96 +1640,6 @@ easier than even using the mark based system.
|
|||||||
"ZZ" #'wdired-finish-edit
|
"ZZ" #'wdired-finish-edit
|
||||||
"ZQ" #'wdired-abort-changes))
|
"ZQ" #'wdired-abort-changes))
|
||||||
#+end_src
|
#+end_src
|
||||||
** WAIT Xwidget
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
Xwidget is a package which allows for the insertion of arbitrary
|
|
||||||
xwidgets into Emacs through buffers. It must be compiled into Emacs
|
|
||||||
so you might need to customise your install. One of its premier uses
|
|
||||||
is in navigating the web which it provides through the function
|
|
||||||
~xwidget-webkit-browse-url~. This renders a fully functional web
|
|
||||||
browser within Emacs.
|
|
||||||
|
|
||||||
Though I am not to keen on using Emacs to browse the web /via/ xwidget
|
|
||||||
(EWW does a good job on its own), I am very interested in its
|
|
||||||
capability to render pages with JavaScript, as it may come of use when
|
|
||||||
doing web development. I can see the results of work very quickly
|
|
||||||
without switching windows all within Emacs.
|
|
||||||
|
|
||||||
2023-10-20: Disabled as it didn't seem to work, and honestly wasn't
|
|
||||||
that useful.
|
|
||||||
*** Xwidget Core
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package xwidget
|
|
||||||
:general
|
|
||||||
(app-leader
|
|
||||||
"u" #'xwidget-webkit-browse-url)
|
|
||||||
(nmmap
|
|
||||||
:keymaps 'xwidget-webkit-mode-map
|
|
||||||
"q" #'quit-window
|
|
||||||
"h" #'xwidget-webkit-scroll-backward
|
|
||||||
"j" #'xwidget-webkit-scroll-up
|
|
||||||
"k" #'xwidget-webkit-scroll-down
|
|
||||||
"l" #'xwidget-webkit-scroll-forward
|
|
||||||
"+" #'xwidget-webkit-zoom-in
|
|
||||||
"-" #'xwidget-webkit-zoom-out
|
|
||||||
(kbd "C-f") #'xwidget-webkit-scroll-up
|
|
||||||
(kbd "C-b") #'xwidget-webkit-scroll-down
|
|
||||||
"H" #'xwidget-webkit-back
|
|
||||||
"L" #'xwidget-webkit-forward
|
|
||||||
"gu" #'xwidget-webkit-browse-url
|
|
||||||
"gr" #'xwidget-webkit-reload
|
|
||||||
"gg" #'xwidget-webkit-scroll-top
|
|
||||||
"G" #'xwidget-webkit-scroll-bottom))
|
|
||||||
#+end_src
|
|
||||||
*** Xwidget Extensions
|
|
||||||
Define a function ~+xwidget/render-file~ that reads a file name and
|
|
||||||
presents it in an xwidget. If the current file is an HTML file, ask
|
|
||||||
if user wants to open current file. Bind it to ~aU~ in the leader.
|
|
||||||
|
|
||||||
Also define a function ~+xwidget/search-query~ that first asks the
|
|
||||||
user what search engine they want to use
|
|
||||||
([[https://duckduckgo.com][Duck Duck Go]] and
|
|
||||||
[[https://devdocs.io][DevDocs]] currently) then asks for a query,
|
|
||||||
which it parses then presents in an xwidget window. Bind to ~as~ in
|
|
||||||
the leader.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package xwidget
|
|
||||||
:commands (+xwidget/render-file +xwidget/search)
|
|
||||||
:general
|
|
||||||
(app-leader
|
|
||||||
"U" #'+xwidget/render-file
|
|
||||||
"s" #'+xwidget/search)
|
|
||||||
:config
|
|
||||||
(setenv "WEBKIT_FORCE_SANDBOX" "0")
|
|
||||||
(defun +xwidget/render-file (&optional FORCE)
|
|
||||||
"Find file (or use current file) and render in xwidget."
|
|
||||||
(interactive)
|
|
||||||
(cond
|
|
||||||
((and (not FORCE) (or (string= (replace-regexp-in-string ".*.html"
|
|
||||||
"html" (buffer-name)) "html")
|
|
||||||
(eq major-mode 'web-mode)
|
|
||||||
(eq major-mode 'html-mode))) ; If in html file
|
|
||||||
(if (y-or-n-p "Open current file?: ") ; Maybe they want to open a separate file
|
|
||||||
(xwidget-webkit-browse-url (format "file://%s" (buffer-file-name)))
|
|
||||||
(+xwidget/render-file t))) ; recurse and open file via prompt
|
|
||||||
(t
|
|
||||||
(xwidget-webkit-browse-url
|
|
||||||
(format "file://%s" (read-file-name "Enter file to open: "))))))
|
|
||||||
|
|
||||||
(defun +xwidget/search ()
|
|
||||||
"Run a search query on some search engine and display in
|
|
||||||
xwidget."
|
|
||||||
(interactive)
|
|
||||||
(let* ((engine (completing-read "Engine: " '("duckduckgo.com" "devdocs.io") nil t))
|
|
||||||
(query-raw (read-string "Enter query: "))
|
|
||||||
(query
|
|
||||||
(cond
|
|
||||||
((string= engine "duckduckgo.com") query-raw)
|
|
||||||
((string= engine "devdocs.io") (concat "_ " query-raw)))))
|
|
||||||
(xwidget-webkit-browse-url (concat "https://" engine "/?q=" query)))))
|
|
||||||
#+end_src
|
|
||||||
** Eshell
|
** Eshell
|
||||||
*** Why Eshell?
|
*** Why Eshell?
|
||||||
Eshell is an integrated shell environment for Emacs, written in Emacs
|
Eshell is an integrated shell environment for Emacs, written in Emacs
|
||||||
@@ -2332,34 +2041,6 @@ back in, I can just do it within Emacs. Pretty nifty, right?
|
|||||||
(with-eval-after-load "evil-collection"
|
(with-eval-after-load "evil-collection"
|
||||||
(evil-collection-calc-setup)))
|
(evil-collection-calc-setup)))
|
||||||
#+end_src
|
#+end_src
|
||||||
*** WAIT Calctex
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
~calc-mode~ also has a 3rd party package called ~calctex~. It renders
|
|
||||||
mathematical expressions within calc as if they were rendered in TeX.
|
|
||||||
You can also copy the expressions in their TeX forms, which is pretty
|
|
||||||
useful when writing a paper. I've set a very specific lock on this
|
|
||||||
repository as it's got quite a messy work-tree and this commit seems to
|
|
||||||
work for me given the various TeX utilities installed via Arch.
|
|
||||||
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package calctex
|
|
||||||
:after calc
|
|
||||||
:straight (calctex :type git :host github :repo "johnbcoughlin/calctex")
|
|
||||||
:hook (calc-mode-hook . calctex-mode))
|
|
||||||
#+end_src
|
|
||||||
** WAIT Ledger
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package ledger-mode
|
|
||||||
:defer t)
|
|
||||||
|
|
||||||
(use-package evil-ledger
|
|
||||||
:after ledger-mode)
|
|
||||||
#+end_src
|
|
||||||
** Zone
|
** Zone
|
||||||
Of course Emacs has a cool screensaver software.
|
Of course Emacs has a cool screensaver software.
|
||||||
|
|
||||||
@@ -2447,25 +2128,6 @@ and integrates slickly into image-dired. Of course,
|
|||||||
erc-nick "oreodave"
|
erc-nick "oreodave"
|
||||||
erc-buffer-display "current"))
|
erc-buffer-display "current"))
|
||||||
#+end_src
|
#+end_src
|
||||||
** WAIT MPV
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
Basically a porcelain over mpv via the IPC interface.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package mpv
|
|
||||||
:defer t
|
|
||||||
:straight t
|
|
||||||
:config
|
|
||||||
(with-eval-after-load "org"
|
|
||||||
(defun org-mpv-complete-link (&optional arg)
|
|
||||||
(replace-regexp-in-string
|
|
||||||
"file:" "mpv:"
|
|
||||||
(org-link-complete-file arg)
|
|
||||||
t t))
|
|
||||||
(org-link-set-parameters "mpv"
|
|
||||||
:follow #'mpv-play :complete #'org-mpv-complete-link)))
|
|
||||||
#+end_src
|
|
||||||
* Text modes
|
* Text modes
|
||||||
Standard packages and configurations for text-mode and its derived
|
Standard packages and configurations for text-mode and its derived
|
||||||
modes.
|
modes.
|
||||||
@@ -2850,37 +2512,6 @@ quickly generate them in C/C++ projects.
|
|||||||
(visit-tags-table (concat (project-root (project-current)) "TAGS"))
|
(visit-tags-table (concat (project-root (project-current)) "TAGS"))
|
||||||
(message "Finished generating tags!")))))))))
|
(message "Finished generating tags!")))))))))
|
||||||
#+end_src
|
#+end_src
|
||||||
** WAIT Projectile
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
Projectile is a project management package which integrates with Emacs
|
|
||||||
very well. It essentially provides alternative Emacs commands scoped
|
|
||||||
to the current 'project', based on differing signs that a directory is
|
|
||||||
a 'project'.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package projectile
|
|
||||||
:hook (emacs-startup-hook . projectile-mode)
|
|
||||||
:general
|
|
||||||
(general-def
|
|
||||||
:keymaps 'projectile-command-map
|
|
||||||
"t" #'projectile-test-project
|
|
||||||
"r" #'projectile-run-project
|
|
||||||
"q" #'projectile-replace-regexp)
|
|
||||||
(leader
|
|
||||||
"p" '(projectile-command-map :which-key "Projectile"))
|
|
||||||
:init
|
|
||||||
(setq projectile-tags-command "ctags -Re -f \"%s\" %s \"%s\""
|
|
||||||
projectile-enable-caching t))
|
|
||||||
#+end_src
|
|
||||||
*** Counsel projectile
|
|
||||||
Counsel integration for projectile commands, very nice.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package counsel-projectile
|
|
||||||
:after (projectile counsel)
|
|
||||||
:config
|
|
||||||
(counsel-projectile-mode +1))
|
|
||||||
#+end_src
|
|
||||||
** devdocs
|
** devdocs
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(use-package devdocs
|
(use-package devdocs
|
||||||
@@ -3441,53 +3072,6 @@ $(DEPDIR):
|
|||||||
"
|
"
|
||||||
_))
|
_))
|
||||||
#+end_src
|
#+end_src
|
||||||
** PDF
|
|
||||||
I use PDFs mostly for reading reports or papers. Though Emacs isn't
|
|
||||||
my preferred application for viewing PDFs (I highly recommend
|
|
||||||
[[https://pwmt.org/projects/zathura/][Zathura]]), similar to most
|
|
||||||
things with Emacs, having a PDF viewer builtin can be a very useful
|
|
||||||
asset.
|
|
||||||
|
|
||||||
For example if I were editing an org document which I was eventually
|
|
||||||
compiling into a PDF, my workflow would be much smoother with a PDF
|
|
||||||
viewer within Emacs that I can open on another pane.
|
|
||||||
*** WAIT PDF tools
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
~pdf-tools~ provides the necessary functionality for viewing PDFs.
|
|
||||||
There is no proper PDF viewing without this package.
|
|
||||||
~evil-collection~ provides a setup for this mode, so use that.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package pdf-tools
|
|
||||||
:mode ("\\.[pP][dD][fF]\\'" . pdf-view-mode)
|
|
||||||
:straight t
|
|
||||||
:display
|
|
||||||
("^.*pdf$"
|
|
||||||
(display-buffer-same-window)
|
|
||||||
(inhibit-duplicate-buffer . t))
|
|
||||||
:config
|
|
||||||
(pdf-tools-install-noverify)
|
|
||||||
(with-eval-after-load "evil-collection"
|
|
||||||
(evil-collection-pdf-setup)))
|
|
||||||
#+end_src
|
|
||||||
*** WAIT PDF grep
|
|
||||||
:PROPERTIES:
|
|
||||||
:header-args:emacs-lisp: :tangle no
|
|
||||||
:END:
|
|
||||||
PDF grep is a Linux tool that allows for searches against the text
|
|
||||||
inside of PDFs similar to standard grep. This cannot be performed by
|
|
||||||
standard grep due to how PDFs are encoded; they are not a clear text
|
|
||||||
format.
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(use-package pdfgrep
|
|
||||||
:after pdf-tools
|
|
||||||
:hook (pdf-view-mode-hook . pdfgrep-mode)
|
|
||||||
:general
|
|
||||||
(nmap
|
|
||||||
:keymaps 'pdf-view-mode-map
|
|
||||||
"M-g" #'pdfgrep))
|
|
||||||
#+end_src
|
|
||||||
** WAIT SQL
|
** WAIT SQL
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:header-args:emacs-lisp: :tangle no
|
:header-args:emacs-lisp: :tangle no
|
||||||
|
|||||||
Reference in New Issue
Block a user