(Emacs)~path -> environment variables, -+dx/newline, +sys-env-cond

sys-env-cond allows for a cond like structure for system name
checking.  This allows for transferable configurations.
This commit is contained in:
2022-01-12 06:24:28 +00:00
parent 056dc5dcc7
commit f2efbcc173

View File

@@ -57,17 +57,23 @@ setup the custom-file to exist in the var-directory
:config
(global-auto-revert-mode 1))
#+end_src
** Path
Setting the path variable cos it can get annoying sometimes
** Environment variables
- Setting the path variable cos it can get annoying sometimes.
- Setting the ssh agent
#+begin_src emacs-lisp
(use-package env
:defer 1
:straight nil
:config
(setenv "PATH"
(concat
(expand-file-name "~/.local/bin:")
(getenv "PATH"))))
(setenv
"PATH" ;
(concat
(expand-file-name "~/.local/bin:")
(getenv "PATH")))
(setenv
"SSH_AGENT_SOCK"
(shell-command-to-string "echo -n \"${XDG_RUNTIME_DIR}/ssh-agent.socket\"")))
#+end_src
* Custom Functions
These are general custom functions I have defined for various
@@ -75,59 +81,27 @@ purposes. These encapsulate functionality that could apply to
multiple packages/situations, otherwise I would've defined it in the
place it's required.
** Toggle buffer
There are many cases where 'toggling' a buffer is very useful. For
example, toggling a shell to access it quickly and hide it away with
little annoyance.
This is negligible with a bit of Emacs lisp. However, as stated
earlier, there are /many/ cases where this is useful. Following the
DRY principle means a more abstract function would be better to use
here.
One may use higher order functions to create an abstract form that
handles toggling, and then the caller can wrap this call in a new
function if they wish to use it in a keybinding. This format or
construct is kinda common (using a higher order function and wrapping
it in an interactive function for use in a binding), so I created a
macro that further wraps this functionality, creating a custom
function for you.
The macro asks for a function name, a buffer name and the function
necessary to create a buffer with that name. It then generates a
function with the given name that holds the necessary logic to
'toggle' buffers.
Like VSCode's toggling feature for just the terminal, but now for
anything I want.
#+begin_src emacs-lisp
(defmacro +dx/create-toggle-function (func-name buf-name buf-create)
"Generate a function named func-name that toggles
(with-eval-after-load "window"
(defmacro +dx/create-toggle-function (func-name buf-name buf-create)
"Generate a function named func-name that toggles
the buffer with name buf-name and creation function buf-create."
`(defun ,func-name ()
(interactive)
(let* ((buffer (or (get-buffer ,buf-name) (,buf-create)))
(displayed (get-buffer-window buffer)))
(cond (displayed
(select-window displayed)
(delete-window))
(t
(display-buffer buffer)
(select-window (get-buffer-window buffer)))))))
`(defun ,func-name ()
(interactive)
(let* ((buffer (or (get-buffer ,buf-name) (,buf-create)))
(displayed (get-buffer-window buffer)))
(cond (displayed
(select-window displayed)
(delete-window))
(t
(display-buffer buffer)
(select-window (get-buffer-window buffer))))))))
#+end_src
** Auto-run command after-save-hook
Macro that defines functionality that runs after a buffer save.
Requires a list of conditions (so it doesn't happen FOR ALL saved
buffers) and a function to run if the buffer satisfies the condition.
Then automatically adds it to the ~after-save-hook~.
On a Luke Smith video on YouTube, I saw a vim feature which I really
liked. He uses it in his DWM videos, but it's essentially an
"autocmd" call that, upon saving a certain file with vim, will run
a shell command (such as =make= or =pdflatex=).
It's arbitrary to program this functionality in Emacs. This macro
essentially performs the same task. In particular if you use
=start-process-shell-command= in the =to-run= function then you also
get a generated buffer of output from the command, useful for checking
errors and general messages. Better than vim, eh?
Define a macro that can run a body of functionality on a given set of
files on after-save-hook.
#+begin_src emacs-lisp
(use-package simple
:straight nil
@@ -151,6 +125,21 @@ common use of this macro.
"For a given list of forms CDR, return a quoted non-argument lambda."
`(quote (lambda () ,@CDR)))
#+end_src
** sys-name-cond
#+begin_src emacs-lisp
(defmacro +dx/sys-name-cond (&rest pairs)
(let ((current-lisp))
(while pairs
(let* ((pair (car pairs))
(name (car pair))
(body (cdr pair)))
(add-to-list
'current-lisp
`((string= ,name (system-name)) ,@body))
(setq pairs (cdr pairs))))
`(cond
,@current-lisp)))
#+end_src
* Aesthetics
Load my custom "personal-theme" theme which is stored in the Emacs lisp
folder (look at [[file:elisp/personal-theme.el][this file]]).
@@ -169,8 +158,9 @@ Set font size to 125.
(use-package faces
:straight nil
:config
(+dx/env-cond "spiderboy" (set-face-attribute 'default nil :height 150))
(+dx/env-cond "oldboy" (set-face-attribute 'default nil :height 115)))
(+dx/sys-name-cond
("spiderboy" (set-face-attribute 'default nil :height 150))
("oldboy" (set-face-attribute 'default nil :height 115))))
#+end_src
Turn off the startup buffer because I prefer [[Dashboard]], and write into
@@ -220,9 +210,7 @@ instead just picking stuff I think is useful.
:config
(general-def
:states '(normal motion)
"SPC" nil
"M-V" #'+dx/newline
"M-v" (proc (interactive) (+dx/newline 1)))
"SPC" nil)
(general-create-definer leader
:states '(normal motion)