[Emacs] Reorganize custom functions and variables, update docstrings
Function terminal-here-default-terminal-command removed
This commit is contained in:
parent
d866f0be65
commit
902b6d3f67
@ -1427,84 +1427,11 @@ in Elisp code.
|
|||||||
Almost all of my code snippets will be prefixed by either my name or the name of
|
Almost all of my code snippets will be prefixed by either my name or the name of
|
||||||
the package or layer they are part of, unless they are an explicit overwrite of
|
the package or layer they are part of, unless they are an explicit overwrite of
|
||||||
a function that already exists.
|
a function that already exists.
|
||||||
|
*** Predicates
|
||||||
*** Nord theming variables
|
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: User_Configuration-Custom_functions_and_variables-Some_theming_variables-9b853a99
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-Predicates-5598df46
|
||||||
:END:
|
:END:
|
||||||
Yes, I do use a preconfigured theme, as mentioned above, but for some elements
|
**** ~phundrak/all?~
|
||||||
such as Eshell, I need to define some variables for color, and I’ll do it here.
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(defvar phundrak/nord0 "#2e3440")
|
|
||||||
(defvar phundrak/nord1 "#3b4252")
|
|
||||||
(defvar phundrak/nord2 "#434c5e")
|
|
||||||
(defvar phundrak/nord3 "#4c566a")
|
|
||||||
(defvar phundrak/nord4 "#d8dee9")
|
|
||||||
(defvar phundrak/nord5 "#e5e9f0")
|
|
||||||
(defvar phundrak/nord6 "#eceff4")
|
|
||||||
(defvar phundrak/nord7 "#8fbcbb")
|
|
||||||
(defvar phundrak/nord8 "#88c0d0")
|
|
||||||
(defvar phundrak/nord9 "#81a1c1")
|
|
||||||
(defvar phundrak/nord10 "#5e81ac")
|
|
||||||
(defvar phundrak/nord11 "#bf616a")
|
|
||||||
(defvar phundrak/nord12 "#d08770")
|
|
||||||
(defvar phundrak/nord13 "#ebcb8b")
|
|
||||||
(defvar phundrak/nord14 "#a3be8c")
|
|
||||||
(defvar phundrak/nord15 "#b48ead")
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
*** ~with-face~
|
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-with-face-7974e15f
|
|
||||||
:END:
|
|
||||||
~with-face~ is a simple yet very useful macro that allows me to easily create
|
|
||||||
strings with faces defined as properties to the string passed as the first
|
|
||||||
argument. Here is how it is implemented:
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(defmacro with-face ($str &rest $properties)
|
|
||||||
"Helper macro for creating strings with faces"
|
|
||||||
`(propertize ,$str 'face (list ,@$properties)))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
*** ~phundrak/abbr-path~
|
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-abbr-path-559b46e3
|
|
||||||
:END:
|
|
||||||
The following is a nice little function I use in my Eshell prompt. It shortens
|
|
||||||
the name of all the parent directories of the current one in its path, but
|
|
||||||
leaves the current one written in full. It also abbreviates the equivalent of
|
|
||||||
the ~$HOME~ (~/home/<username>/~) directory to a simple =~=.
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(defun phundrak/abbr-path ($path &optional $abbreviate)
|
|
||||||
"Abbreviate `$path'. If `$abbreviate' is `t', then all parent
|
|
||||||
directories of the current directory will be abbreviated to one
|
|
||||||
letter only. If a parent directory is a hidden directory (i.e.
|
|
||||||
preceeded by a dot), the directory will be abbreviated to the dot
|
|
||||||
plus the first letter of the name of the directory (e.g.
|
|
||||||
\".config\" -> \".c\").
|
|
||||||
|
|
||||||
For public use of the function, `$path' should be a string
|
|
||||||
representing a UNIX path. For internal use, `$path' can also be a
|
|
||||||
list. If `$path' is neither of those, an error will be thrown by
|
|
||||||
the function."
|
|
||||||
(cond
|
|
||||||
((stringp $path) (f-short
|
|
||||||
(if $abbreviate
|
|
||||||
(phundrak/abbr-path (f-split (phundrak/abbr-path $path)))
|
|
||||||
$path)))
|
|
||||||
((null $path) "")
|
|
||||||
((listp $path)
|
|
||||||
(f-join (cond ((= 1 (length $path)) (car $path))
|
|
||||||
(t (let* ((dir (car $path))
|
|
||||||
(first-char (s-left 1 dir)))
|
|
||||||
(if (string= "." first-char)
|
|
||||||
(s-left 2 dir)
|
|
||||||
first-char))))
|
|
||||||
(phundrak/abbr-path (cdr $path))))
|
|
||||||
(t (error "Invalid argument %s, neither stringp nor listp" $path))))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
*** ~phundrak/all?~
|
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-all-0655600c
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-all-0655600c
|
||||||
:END:
|
:END:
|
||||||
@ -1524,31 +1451,29 @@ success, otherwise it is a failure. Note that empty lists will always return
|
|||||||
t))
|
t))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** ~phundrak/blog-publish~
|
**** ~phundrak/none?~
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-blog-publish-99c96b2d
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-none-463dee26
|
||||||
:END:
|
:END:
|
||||||
This function is quite a simple function made to automatically publish [[https://blog.phundrak.com][my blog]]
|
In the same vein as ~phundrak/all?~, ~phundrak/none?~ checks if all elements of
|
||||||
based on Hugo. After exporting my blog using ~ox-hugo~, I simply have to call
|
~seq~ do not satify the predicate ~fn~. Again, if the list is empty, it will
|
||||||
this function which will look for all files located in =~/org/blog/public= and
|
return ~t~.
|
||||||
copy them to my remote server once ~hugo~ has been executed in =~/org/blog=.
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun phundrak/blog-publish ()
|
(defun phundrak/none? (fn seq)
|
||||||
(interactive)
|
"Check if all members of `SEQ' do not satisfy predicate `FN'.
|
||||||
(let* ((blog-path "~/org/blog")
|
Note that it will return t if `SEQ' is nil."
|
||||||
(public-path (concat blog-path "/public"))
|
(declare (pure t) (side-effect-free t))
|
||||||
(target-path "/rsync:Tilo:/home/phundrak/www/phundrak.com/blog"))
|
(if seq
|
||||||
(shell-command (format "cd %s && hugo" blog-path))
|
(and (not (funcall fn (car seq)))
|
||||||
(let ((files (mapcar (lambda (file)
|
(phundrak/none? fn (cdr seq)))
|
||||||
(f-relative file public-path))
|
t))
|
||||||
(f-files (format "%s/public" blog-path) nil t))))
|
|
||||||
(dolist (file files)
|
|
||||||
(copy-file (concat public-path "/" file)
|
|
||||||
(concat target-path "/" file)
|
|
||||||
t nil t)))))
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** ~phundrak/eshell-git-status~
|
*** Eshell prompt-related functions
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-Eshell-prompt-related-functions-79d07f21
|
||||||
|
:END:
|
||||||
|
**** ~phundrak/eshell-git-status~
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-eshell-git-status-28f16e94
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-eshell-git-status-28f16e94
|
||||||
:END:
|
:END:
|
||||||
@ -1560,11 +1485,13 @@ git prompt that will be inserted in my Eshell prompt. And just for shit and
|
|||||||
giggles, I’ve made it so it is a powerline prompt.
|
giggles, I’ve made it so it is a powerline prompt.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun phundrak/eshell-git-status ($path &optional $background-color)
|
(defun phundrak/eshell-git-status ($path &optional $background-color)
|
||||||
"Returns a string indicating the status of the current
|
"Returns a string indicating the status of the repository located
|
||||||
repository if it exists. It should also append the name of the
|
in `$PATH' if it exists. It should also append the name of the
|
||||||
current branch if it is not `master' or `main'. The theme is
|
current branch if it is not `master' or `main'.
|
||||||
inspired by the bobthefish theme for the fish shell which you can
|
`$BACKGROUND-COLOR' allows to choose the color that will be
|
||||||
find here: https://github.com/oh-my-fish/theme-bobthefish
|
visible behind the powerline characters. The theme is inspired by
|
||||||
|
the bobthefish theme for the fish shell which you can find here:
|
||||||
|
https://github.com/oh-my-fish/theme-bobthefish
|
||||||
|
|
||||||
Color code:
|
Color code:
|
||||||
- green:
|
- green:
|
||||||
@ -1622,19 +1549,94 @@ giggles, I’ve made it so it is a powerline prompt.
|
|||||||
:foreground accent)))))
|
:foreground accent)))))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** ~phundrak/file-to-string~
|
**** ~phundrak/git-repo-root~
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-git-repo-root-f7cf3bb9
|
||||||
|
:END:
|
||||||
|
This function detects if the path passed as an argument points to a git
|
||||||
|
directory or to one of its subdirectories. If it is, it will return the path to
|
||||||
|
the root of the git repository, else it will return ~nil~.
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defun phundrak/git-repo-root ($path)
|
||||||
|
"Return `$PATH' if it points to a git repository or one of its
|
||||||
|
subdirectories."
|
||||||
|
(when $path
|
||||||
|
(if (f-dir? (concat $path "/.git"))
|
||||||
|
$path
|
||||||
|
(phundrak/git-repo-root (f-parent $path)))))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
**** ~phundrak/prompt-toggle-abbreviation~
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-prompt-toggle-abbreviation-753ca549
|
||||||
|
:END:
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defvar phundrak/prompt--abbreviate t
|
||||||
|
"Whether or not to abbreviate the displayed path in the Eshell
|
||||||
|
prompt.")
|
||||||
|
|
||||||
|
(defun phundrak/prompt-toggle-abbreviation ()
|
||||||
|
"Toggles whether the Eshell prompt should shorten the name of
|
||||||
|
the parent directories or not. See `phundrak/eshell-prompt'."
|
||||||
|
(interactive)
|
||||||
|
(setq phundrak/prompt--abbreviate (not phundrak/prompt--abbreviate)))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
**** ~phundrak/abbr-path~
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-abbr-path-559b46e3
|
||||||
|
:END:
|
||||||
|
The following is a nice little function I use in my Eshell prompt. It shortens
|
||||||
|
the name of all the parent directories of the current one in its path, but
|
||||||
|
leaves the current one written in full. It also abbreviates the equivalent of
|
||||||
|
the ~$HOME~ (~/home/<username>/~) directory to a simple =~=.
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defun phundrak/abbr-path ($path &optional $abbreviate)
|
||||||
|
"Abbreviate `$PATH'. If `$ABBREVIATE' is t, then all parent
|
||||||
|
directories of the current directory will be abbreviated to one
|
||||||
|
letter only. If a parent directory is a hidden directory (i.e.
|
||||||
|
preceeded by a dot), the directory will be abbreviated to the dot
|
||||||
|
plus the first letter of the name of the directory (e.g.
|
||||||
|
\".config\" -> \".c\").
|
||||||
|
|
||||||
|
For public use of the function, `$PATH' should be a string
|
||||||
|
representing a UNIX path. For internal use, `$PATH' can also be a
|
||||||
|
list. If `$PATH' is neither of those, an error will be thrown by
|
||||||
|
the function."
|
||||||
|
(cond
|
||||||
|
((stringp $path) (f-short
|
||||||
|
(if $abbreviate
|
||||||
|
(phundrak/abbr-path (f-split (phundrak/abbr-path $path)))
|
||||||
|
$path)))
|
||||||
|
((null $path) "")
|
||||||
|
((listp $path)
|
||||||
|
(f-join (cond ((= 1 (length $path)) (car $path))
|
||||||
|
(t (let* ((dir (car $path))
|
||||||
|
(first-char (s-left 1 dir)))
|
||||||
|
(if (string= "." first-char)
|
||||||
|
(s-left 2 dir)
|
||||||
|
first-char))))
|
||||||
|
(phundrak/abbr-path (cdr $path))))
|
||||||
|
(t (error "Invalid argument %s, neither stringp nor listp" $path))))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
*** Files-related functions
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-Files-related-functions-0b66f353
|
||||||
|
:END:
|
||||||
|
**** ~phundrak/file-to-string~
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-file-to-string-efab0fba
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-file-to-string-efab0fba
|
||||||
:END:
|
:END:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun phundrak/file-to-string (FILE)
|
(defun phundrak/file-to-string (FILE)
|
||||||
"Returns the content of `FILE' as a string"
|
"Returns the content of `FILE' as a string."
|
||||||
(with-temp-buffer
|
(with-temp-buffer
|
||||||
(insert-file-contents FILE)
|
(insert-file-contents FILE)
|
||||||
(buffer-string)))
|
(buffer-string)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** ~phundrak/find-org-files~
|
**** ~phundrak/find-org-files~
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: Custom-functions-phundrak-find-org-files-a8fd200f
|
:CUSTOM_ID: Custom-functions-phundrak-find-org-files-a8fd200f
|
||||||
:END:
|
:END:
|
||||||
@ -1646,8 +1648,11 @@ conlanging files which are located in =~/Documents/conlanging=, and all my
|
|||||||
university notes are in =~/Documents/university=. Let’s declare these
|
university notes are in =~/Documents/university=. Let’s declare these
|
||||||
directories in a variable:
|
directories in a variable:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defvar phundrak/org-directories '("~/org" "~/Documents/university/S8" "~/Documents/conlanging")
|
(defvar phundrak/org-directories '("~/org"
|
||||||
"Directories in which to look for org files with the function `phundrak/find-org-files'")
|
"~/Documents/university/S8"
|
||||||
|
"~/Documents/conlanging")
|
||||||
|
"Directories in which to look for org files with the function
|
||||||
|
`phundrak/find-org-files'.")
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
With this established, let’s write some emacs-lisp that will allow me to get a
|
With this established, let’s write some emacs-lisp that will allow me to get a
|
||||||
@ -1671,58 +1676,7 @@ as [[https://github.com/sharkdp/fd][fd]].
|
|||||||
"\n")))))
|
"\n")))))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** ~phundrak/git-repo-root~
|
**** ~phundrak/open-marked-files~
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-git-repo-root-f7cf3bb9
|
|
||||||
:END:
|
|
||||||
This function detects if the path passed as an argument points to a git
|
|
||||||
directory or to one of its subdirectories. If it is, it will return the path to
|
|
||||||
the root of the git repository, else it will return ~nil~.
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(defun phundrak/git-repo-root ($path)
|
|
||||||
"Return `$path' if it points to a git repository or one of its
|
|
||||||
subdirectories"
|
|
||||||
(when $path
|
|
||||||
(if (f-dir? (concat $path "/.git"))
|
|
||||||
$path
|
|
||||||
(phundrak/git-repo-root (f-parent $path)))))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
*** ~phundrak/none?~
|
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-none-463dee26
|
|
||||||
:END:
|
|
||||||
In the same vein as ~phundrak/all?~, ~phundrak/none?~ checks if all elements of
|
|
||||||
~seq~ do not satify the predicate ~fn~. Again, if the list is empty, it will
|
|
||||||
return ~t~.
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(defun phundrak/none? (fn seq)
|
|
||||||
"Check if all members of `SEQ' do not satisfy predicate `FN'.
|
|
||||||
Note that it will return t if `SEQ' is nil."
|
|
||||||
(declare (pure t) (side-effect-free t))
|
|
||||||
(if seq
|
|
||||||
(and (not (funcall fn (car seq)))
|
|
||||||
(phundrak/none? fn (cdr seq)))
|
|
||||||
t))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
*** ~phundrak/prompt-toggle-abbreviation~
|
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-prompt-toggle-abbreviation-753ca549
|
|
||||||
:END:
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(defvar phundrak/prompt--abbreviate t
|
|
||||||
"Whether or not to abbreviate the displayed path in the Eshell
|
|
||||||
prompt")
|
|
||||||
|
|
||||||
(defun phundrak/prompt-toggle-abbreviation ()
|
|
||||||
"Toggles whether the Eshell prompt should shorten the name of
|
|
||||||
the parent directories or not. See `phundrak/eshell-prompt'"
|
|
||||||
(interactive)
|
|
||||||
(setq phundrak/prompt--abbreviate (not phundrak/prompt--abbreviate)))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
*** ~phundrak/open-marked-files~
|
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-open-marked-files-b87d37f7
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-open-marked-files-b87d37f7
|
||||||
:END:
|
:END:
|
||||||
@ -1731,6 +1685,8 @@ multiple files. This function will basically look for all marked files in the
|
|||||||
current dired buffer and open each one of them in their individual buffer.
|
current dired buffer and open each one of them in their individual buffer.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun phundrak/open-marked-files ()
|
(defun phundrak/open-marked-files ()
|
||||||
|
"This function allows the user to open all marked files in a
|
||||||
|
Dired buffer at once."
|
||||||
(interactive)
|
(interactive)
|
||||||
(let ((file-list (if (string= major-mode "dired-mode")
|
(let ((file-list (if (string= major-mode "dired-mode")
|
||||||
(dired-get-marked-files)
|
(dired-get-marked-files)
|
||||||
@ -1740,6 +1696,105 @@ current dired buffer and open each one of them in their individual buffer.
|
|||||||
file-list)))
|
file-list)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
**** ~xah/open-in-external-app~
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-xah-open-in-external-app-2655f31c
|
||||||
|
:END:
|
||||||
|
Here is another of Xah’s functions, this time to open a file externally to
|
||||||
|
Emacs. For instance, I sometimes want to open a PDF in Zathura rather than in
|
||||||
|
Emacs, or an HTML file in Firefox. With this function, it is now possible!
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defun xah/open-in-external-app (&optional files)
|
||||||
|
"Open the current file or dired marked files in external app.
|
||||||
|
The app is chosen from your OS’ preference.
|
||||||
|
|
||||||
|
When called in emacs lisp, if `FILES' is given, open that.
|
||||||
|
|
||||||
|
URL `http://ergoemacs.org/emacs/emacs_dired_open_file_in_ext_apps.html'
|
||||||
|
Version 2019-01-18"
|
||||||
|
(interactive)
|
||||||
|
(let* (($file-list (if files
|
||||||
|
(progn (list files))
|
||||||
|
(if (string-equal major-mode "dired-mode")
|
||||||
|
(dired-get-marked-files)
|
||||||
|
(list (buffer-file-name)))))
|
||||||
|
($do-it-p (if (<= (length $file-list) 5)
|
||||||
|
t
|
||||||
|
(y-or-n-p "Open more than 5 files? "))))
|
||||||
|
(when $do-it-p
|
||||||
|
(mapc (lambda ($fpath)
|
||||||
|
(let ((process-connection-type nil))
|
||||||
|
(start-process "" nil "xdg-open" $fpath)))
|
||||||
|
$file-list))))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
*** Theming
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-Theming-7ad4dc46
|
||||||
|
:END:
|
||||||
|
**** Nord theming variables
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: User_Configuration-Custom_functions_and_variables-Some_theming_variables-9b853a99
|
||||||
|
:END:
|
||||||
|
Yes, I do use a preconfigured theme, as mentioned above, but for some elements
|
||||||
|
such as Eshell, I need to define some variables for color, and I’ll do it here.
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defvar phundrak/nord0 "#2e3440")
|
||||||
|
(defvar phundrak/nord1 "#3b4252")
|
||||||
|
(defvar phundrak/nord2 "#434c5e")
|
||||||
|
(defvar phundrak/nord3 "#4c566a")
|
||||||
|
(defvar phundrak/nord4 "#d8dee9")
|
||||||
|
(defvar phundrak/nord5 "#e5e9f0")
|
||||||
|
(defvar phundrak/nord6 "#eceff4")
|
||||||
|
(defvar phundrak/nord7 "#8fbcbb")
|
||||||
|
(defvar phundrak/nord8 "#88c0d0")
|
||||||
|
(defvar phundrak/nord9 "#81a1c1")
|
||||||
|
(defvar phundrak/nord10 "#5e81ac")
|
||||||
|
(defvar phundrak/nord11 "#bf616a")
|
||||||
|
(defvar phundrak/nord12 "#d08770")
|
||||||
|
(defvar phundrak/nord13 "#ebcb8b")
|
||||||
|
(defvar phundrak/nord14 "#a3be8c")
|
||||||
|
(defvar phundrak/nord15 "#b48ead")
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
**** ~with-face~
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-with-face-7974e15f
|
||||||
|
:END:
|
||||||
|
~with-face~ is a simple yet very useful macro that allows me to easily create
|
||||||
|
strings with faces defined as properties to the string passed as the first
|
||||||
|
argument. Here is how it is implemented:
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defmacro with-face ($str &rest $properties)
|
||||||
|
"Helper macro for creating strings `$STR' with `$PROPERTIES'"
|
||||||
|
`(propertize ,$str 'face (list ,@$properties)))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
*** ~phundrak/blog-publish~
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-blog-publish-99c96b2d
|
||||||
|
:END:
|
||||||
|
This function is quite a simple function made to automatically publish [[https://blog.phundrak.com][my blog]]
|
||||||
|
based on Hugo. After exporting my blog using ~ox-hugo~, I simply have to call
|
||||||
|
this function which will look for all files located in =~/org/blog/public= and
|
||||||
|
copy them to my remote server once ~hugo~ has been executed in =~/org/blog=.
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defun phundrak/blog-publish ()
|
||||||
|
"Publish my blog through Hugo and rsync to my remote server."
|
||||||
|
(interactive)
|
||||||
|
(let* ((blog-path "~/org/blog")
|
||||||
|
(public-path (concat blog-path "/public"))
|
||||||
|
(target-path "/rsync:Tilo:/home/phundrak/www/phundrak.com/blog"))
|
||||||
|
(shell-command (format "cd %s && hugo" blog-path))
|
||||||
|
(let ((files (mapcar (lambda (file)
|
||||||
|
(f-relative file public-path))
|
||||||
|
(f-files (format "%s/public" blog-path) nil t))))
|
||||||
|
(dolist (file files)
|
||||||
|
(copy-file (concat public-path "/" file)
|
||||||
|
(concat target-path "/" file)
|
||||||
|
t nil t)))))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
*** ~phundrak/var-or-if-nil~
|
*** ~phundrak/var-or-if-nil~
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-var-or-if-nil-40e2e54a
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-phundrak-var-or-if-nil-40e2e54a
|
||||||
@ -1748,8 +1803,8 @@ This simple function helps me return either the value ~var~ holds, or if it is
|
|||||||
~nil~ it will return the value ~value~ holds (or will return).
|
~nil~ it will return the value ~value~ holds (or will return).
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun phundrak/var-or-if-nil ($var $value)
|
(defun phundrak/var-or-if-nil ($var $value)
|
||||||
"Return the result yield by `$value' if `$var' is `nil', return
|
"Return the result yield by `$VALUE' if `$VAR' is nil, return
|
||||||
`$var' otherwise"
|
`$VAR' otherwise"
|
||||||
(if (null $var)
|
(if (null $var)
|
||||||
$value
|
$value
|
||||||
$var))
|
$var))
|
||||||
@ -1766,7 +1821,8 @@ new parameters in the ~new~ function. It also comes with a helper function that
|
|||||||
parses the arguments given to the ~new~ function.
|
parses the arguments given to the ~new~ function.
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun phundrak//yas-snippet-split-rust-args ($arg-string)
|
(defun phundrak//yas-snippet-split-rust-args ($arg-string)
|
||||||
"Split a Rust argument string into ((name, default)...) tuples"
|
"Split a Rust argument string `$ARG-STRING' into ((name,
|
||||||
|
default)...) tuples"
|
||||||
(mapcar (lambda ($elem)
|
(mapcar (lambda ($elem)
|
||||||
(split-string $elem "[[:blank:]]*:[[:blank:]]*" t))
|
(split-string $elem "[[:blank:]]*:[[:blank:]]*" t))
|
||||||
(split-string $arg-string "[[:blank:]]*,[[:blank:]]*" t)))
|
(split-string $arg-string "[[:blank:]]*,[[:blank:]]*" t)))
|
||||||
@ -1806,20 +1862,6 @@ Cairo. The function definition was taken [[https://github.com/caiohcs/my-emacs#s
|
|||||||
(message filename)))
|
(message filename)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** ~terminal-here-default-terminal-command~
|
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-terminal-here-default-terminal-command-9baa3715
|
|
||||||
:END:
|
|
||||||
This function is actually an overwrite of the default one which apparently does
|
|
||||||
not work on my machine. This function is called by ~terminal-here-launch~ and
|
|
||||||
spawns an external terminal emulator in the directory emacs was in when the
|
|
||||||
terminal was invoked. I simply point out to this function the name of my
|
|
||||||
terminal emulator. Here is the code:
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(defun terminal-here-default-terminal-command (_dir)
|
|
||||||
'("st"))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
*** ~xah/dired-sort~
|
*** ~xah/dired-sort~
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-xah-dired-sort-28bde838
|
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-xah-dired-sort-28bde838
|
||||||
@ -1847,38 +1889,6 @@ files in a dired buffer depending on four factors:
|
|||||||
(dired-sort-other $arg )))
|
(dired-sort-other $arg )))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** ~xah/open-in-external-app~
|
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: User-Configuration-Custom-functions-macros-and-variables-xah-open-in-external-app-2655f31c
|
|
||||||
:END:
|
|
||||||
Here is another of Xah’s functions, this time to open a file externally to
|
|
||||||
Emacs. For instance, I sometimes want to open a PDF in Zathura rather than in
|
|
||||||
Emacs, or an HTML file in Firefox. With this function, it is now possible!
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
|
||||||
(defun xah/open-in-external-app (&optional files)
|
|
||||||
"Open the current file or dired marked file in external app.
|
|
||||||
The app is chosen from your OS’ preference.
|
|
||||||
|
|
||||||
When called in emacs lisp, if files is given, open that.
|
|
||||||
|
|
||||||
URL `http://ergoemacs.org/emacs/emacs_dired_open_file_in_ext_apps.html'
|
|
||||||
Version 2019-01-18"
|
|
||||||
(interactive)
|
|
||||||
(let* (($file-list (if files
|
|
||||||
(progn (list files))
|
|
||||||
(if (string-equal major-mode "dired-mode")
|
|
||||||
(dired-get-marked-files)
|
|
||||||
(list (buffer-file-name)))))
|
|
||||||
($do-it-p (if (<= (length $file-list) 5)
|
|
||||||
t
|
|
||||||
(y-or-n-p "Open more than 5 files? "))))
|
|
||||||
(when $do-it-p
|
|
||||||
(mapc (lambda ($fpath)
|
|
||||||
(let ((process-connection-type nil))
|
|
||||||
(start-process "" nil "xdg-open" $fpath)))
|
|
||||||
$file-list))))
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
** Emacs builtins
|
** Emacs builtins
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: User_Configuration-Emacs_builtins-7822b8dd
|
:CUSTOM_ID: User_Configuration-Emacs_builtins-7822b8dd
|
||||||
|
Loading…
Reference in New Issue
Block a user