So! Many! Changes!!

This commit is contained in:
Case Duckworth 2022-01-17 13:45:32 -06:00
parent ee1720b8ad
commit 1394b10658
13 changed files with 257 additions and 153 deletions

View File

@ -57,8 +57,7 @@ See `no-littering' for examples.")
(progn (require 'system) (progn (require 'system)
(setq system-default-font "DejaVu Sans Mono" (setq system-default-font "DejaVu Sans Mono"
system-variable-pitch-font "DejaVu Sans") system-variable-pitch-font "DejaVu Sans")
(setq system-load-directory (sync/ "emacs/systems/" t)) (system-settings-load))
(system-settings-load nil :nowarn))
;;; Default frame settings ;;; Default frame settings
@ -75,7 +74,7 @@ See `no-littering' for examples.")
(bottom . right))) (bottom . right)))
;;; Fonts ;;; Fonts
(progn (+with-ensure-after-init
;; Set default faces ;; Set default faces
(+with-message "Setting default faces" (+with-message "Setting default faces"
(let ((font-name system-default-font) (let ((font-name system-default-font)
@ -90,23 +89,21 @@ See `no-littering' for examples.")
:height variable-font-size))) :height variable-font-size)))
;; Emoji fonts ;; Emoji fonts
(+ensure-after-init (+with-message "Adding emoji fonts"
(lambda () (let ((ffl (font-family-list)))
(+with-message "Adding emoji fonts" (dolist (font '("Noto Color Emoji"
(let ((ffl (font-family-list))) "Noto Emoji"
(dolist (font '("Noto Color Emoji" "Segoe UI Emoji"
"Noto Emoji" "Apple Color Emoji"
"Segoe UI Emoji" "FreeSans"
"Apple Color Emoji" "FreeMono"
"FreeSans" "FreeSerif"
"FreeMono" "Unifont"
"FreeSerif" "Symbola"))
"Unifont" (when (member font ffl)
"Symbola")) (message "Found font: %s" font)
(when (member font ffl) (set-fontset-font t 'symbol
(message "Found font: %s" font) (font-spec :family font) nil :append))))))
(set-fontset-font t 'symbol
(font-spec :family font) nil :append))))))))
;;; Packages ;;; Packages

4
eshell/aliases Normal file
View File

@ -0,0 +1,4 @@
alias edit find-file $1
alias e find-file $1
alias ff find-file $1
alias sudo eshell/sudo $*

14
eshell/history Normal file
View File

@ -0,0 +1,14 @@
cd .emacs.d/.etc/straight/build/org/
ls
cd ../
ls
cd ../repos/org/
ls
find-file .emacs.d/init.el
exit
apt search font
cd
vterm
cat ~/Sync/fonts-debian.txt | sudo xargs apt install
cat ~/Sync/fonts-debian.txt | sudo xargs apt install -y
alias e='find-file $*'

11
eshell/lastdir Normal file
View File

@ -0,0 +1,11 @@
~
/home/case/.emacs.d/.etc/straight/build/org
/home/case/.emacs.d/.etc/straight/build
/home/case/.emacs.d/.etc/straight/repos/org
/home/case
/home/case/.emacs.d
~/.emacs.d
/home/case/Sync/Click Here Digital
/home/case/Sync
/home/case
/home/case/.emacs.d

50
init.el
View File

@ -153,9 +153,11 @@
#'browse-url-default-browser) #'browse-url-default-browser)
browse-url-new-window-flag nil browse-url-new-window-flag nil
browse-url-firefox-arguments '("--new-tab") browse-url-firefox-arguments '("--new-tab")
browse-url-firefox-new-window-is-tab t browse-url-firefox-new-window-is-tab t)
;; TODO: Add variables for other transformations and what-not. (defvar +invidious-host
+invidious-host "invidious.snopyta.org") ;; TODO: Add variables for other transformations and what-not.
"invidious.snopyta.org"
"Host for invidious instance.")
;; Set up external browsing URLs. ;; Set up external browsing URLs.
(add-to-list '+custom-variable-allowlist (add-to-list '+custom-variable-allowlist
'+browse-url-secondary-browser-regexps) '+browse-url-secondary-browser-regexps)
@ -182,7 +184,7 @@
(t #'eww-browse-url)) (t #'eww-browse-url))
args))) args)))
(cons (rx (or ;; videos (cons (rx (or ;; videos
"youtube.com" "youtu.be" (eval +invidious-host) "invidious" "youtube.com" "youtu.be" "invidious" "yewtu.be"
(seq "." (or "mp4" "gif" "mov" "MOV" "webm") eos) (seq "." (or "mp4" "gif" "mov" "MOV" "webm") eos)
;; music ;; music
"soundcloud.com" "bandcamp.com" "soundcloud.com" "bandcamp.com"
@ -281,12 +283,17 @@
(advice-add #'eval-region :around #'+eval-region@pulse)) (advice-add #'eval-region :around #'+eval-region@pulse))
(setup eshell (setup eshell
(:also-load +eshell (:also-load em-smart
em-smart
em-tramp) em-tramp)
(:option eshell-aliases-file (.etc "eshell/aliases" t) (:require +eshell)
(+define-dir eshell/ (locate-user-emacs-file "eshell")
"Where to place Eshell-specific files.")
(:option eshell-aliases-file (eshell/ "aliases")
;; What are these for???
eshell-rc-script (eshell/ "profile")
eshell-login-script (eshell/ "login")
eshell-destroy-buffer-when-process-dies t eshell-destroy-buffer-when-process-dies t
eshell-directory-name (.etc "eshell/" t) eshell-directory-name eshell/
eshell-error-if-no-glob t eshell-error-if-no-glob t
eshell-hist-ignore-dups t eshell-hist-ignore-dups t
eshell-kill-on-exit nil eshell-kill-on-exit nil
@ -298,9 +305,13 @@
eshell-smart-space-goes-to-end t eshell-smart-space-goes-to-end t
eshell-where-to-jump 'begin eshell-where-to-jump 'begin
eshell-banner-message "") eshell-banner-message "")
(setf (alist-get 'eshell-mode mwim-beginning-of-line-function) (with-eval-after-load 'mwim
#'eshell-bol) (setf (alist-get 'eshell-mode mwim-beginning-of-line-function)
#'eshell-bol))
(+eshell-eval-after-load (+eshell-eval-after-load
;; Local modes
(dolist (mode '((hungry-delete-mode . -1)))
(funcall (car mode) (cdr mode)))
;; Set local settings ;; Set local settings
(dolist (setting (list (cons 'outline-regexp eshell-prompt-regexp) (dolist (setting (list (cons 'outline-regexp eshell-prompt-regexp)
(cons 'page-delimiter eshell-prompt-regexp) (cons 'page-delimiter eshell-prompt-regexp)
@ -523,10 +534,11 @@
org-agenda-file-regexp org-agenda-file-regexp
org-agenda-templates)) org-agenda-templates))
(add-to-list '+custom-variable-allowlist var)) (add-to-list '+custom-variable-allowlist var))
(defvar org-agenda-files nil) (with-eval-after-load 'org
(add-to-list 'org-agenda-files (sync/ "org/" t)) (add-to-list 'org-agenda-files (sync/ "org/" t)))
(:+leader "a" #'org-agenda "C-a" #'org-agenda) (:+leader "a" #'org-agenda "C-a" #'org-agenda)
(:hook #'hl-line-mode)) (:hook #'hl-line-mode)
(add-hook 'org-agenda-after-show-hook 'org-narrow-to-subtree))
(setup org-capture (setup org-capture
(:require +org-capture) (:require +org-capture)
@ -609,7 +621,8 @@
(:hook #'turn-on-auto-fill)) (:hook #'turn-on-auto-fill))
(setup time (setup time
(:option display-time-format "%H:%M" ;; TODO: +display-time-mode with MOAR customizations
(:option display-time-format "%H:%M %a %e"
display-time-default-load-average nil display-time-default-load-average nil
display-time-mail-file :disable) display-time-mail-file :disable)
(display-time-mode +1)) (display-time-mode +1))
@ -1086,7 +1099,7 @@ See also `crux-reopen-as-root-mode'."
(eshell-vterm-mode +1)) (eshell-vterm-mode +1))
(setup (:straight-when exec-path-from-shell (setup (:straight-when exec-path-from-shell
(eq system-system 'linux)) (eq system-type 'gnu/linux))
(require 'exec-path-from-shell) (require 'exec-path-from-shell)
(dolist (var '("SSH_AUTH_SOCK" (dolist (var '("SSH_AUTH_SOCK"
"SSH_AGENT_PID" "SSH_AGENT_PID"
@ -1129,7 +1142,7 @@ See also `crux-reopen-as-root-mode'."
(setup (:straight-when (forge (setup (:straight-when (forge
:host github :repo "magit/forge") :host github :repo "magit/forge")
(eq system-system 'linux)) (eq system-type 'gnu/linux))
(require 'forge) (require 'forge)
(add-to-list 'forge-alist (add-to-list 'forge-alist
'("tildegit.org" "tildegit.org/api/v1" "tildegit.org" '("tildegit.org" "tildegit.org/api/v1" "tildegit.org"
@ -1284,6 +1297,7 @@ See also `crux-reopen-as-root-mode'."
(minions-mode +1)) (minions-mode +1))
(setup (:straight (mode-line-bell (setup (:straight (mode-line-bell
:host github :repo "purcell/mode-line-bell"
:fork (:host github :repo "duckwork/mode-line-bell"))) :fork (:host github :repo "duckwork/mode-line-bell")))
(:option mode-line-bell-flash-time 0.1) (:option mode-line-bell-flash-time 0.1)
(mode-line-bell-mode +1)) (mode-line-bell-mode +1))
@ -1388,6 +1402,7 @@ See also `crux-reopen-as-root-mode'."
(setup (:straight sicp)) (setup (:straight sicp))
(setup (:straight (simple-modeline (setup (:straight (simple-modeline
:host github :repo "gexplorer/simple-modeline"
:fork (:host github :repo "duckwork/simple-modeline"))) :fork (:host github :repo "duckwork/simple-modeline")))
(:require +modeline) (:require +modeline)
(:option +modeline-minions-icon ";" (:option +modeline-minions-icon ";"
@ -1637,9 +1652,10 @@ See also `crux-reopen-as-root-mode'."
(:global "M-z" #'+zzz-to-char)) (:global "M-z" #'+zzz-to-char))
(setup (:straight (ytdious (setup (:straight (ytdious
:host github :repo "spiderbit/ytdious"
:fork (:host github :repo "duckwork/ytdious"))) :fork (:host github :repo "duckwork/ytdious")))
(:also-load +ytdious) (:also-load +ytdious)
(:option ytdious-invidious-api-url (if +invidious-host (:option ytdious-invidious-api-url (if +invidious-host
(concat "https://" invidious-host) (concat "https://" +invidious-host)
"https://invidious.snopyta.org")) "https://invidious.snopyta.org"))
(:bind "y" #'+ytdious-watch)) (:bind "y" #'+ytdious-watch))

View File

@ -157,6 +157,8 @@ With a prefix argument N, (un)comment that many sexps."
(+lisp-comment-sexp--raw)))) (+lisp-comment-sexp--raw))))
;;; Sort `setq' constructs ;;; Sort `setq' constructs
;;https://emacs.stackexchange.com/questions/33039/
(defun +lisp-sort-setq () (defun +lisp-sort-setq ()
(interactive) (interactive)
(save-excursion (save-excursion

View File

@ -420,8 +420,7 @@ the deletion might narrow the column."
"Open thing at point, or if there isn't something, list things." "Open thing at point, or if there isn't something, list things."
(interactive "P") (interactive "P")
(save-excursion (save-excursion
(let* ((browse-url-browser-function #'browse-url-default-browser) (let* ((this-char-type (org-element-type (org-element-context)))
(this-char-type (org-element-type (org-element-context)))
(prev-char-type (ignore-errors (prev-char-type (ignore-errors
(save-excursion (save-excursion
(backward-char) (backward-char)

View File

@ -4,7 +4,7 @@
;;; Code: ;;; Code:
(require +vterm) (require 'vterm)
(defun +vterm-counsel-yank-pop-action (orig-fun &rest args) (defun +vterm-counsel-yank-pop-action (orig-fun &rest args)
(if (equal major-mode 'vterm-mode) (if (equal major-mode 'vterm-mode)

View File

@ -114,13 +114,19 @@ If Emacs is already started, run FUNCTION. Otherwise, add it to
(funcall function) (funcall function)
(add-hook 'after-init-hook function))) (add-hook 'after-init-hook function)))
(defmacro +with-ensure-after-init (&rest body)
"Ensure BODY forms run after init.
Convenience macro wrapper around `+ensure-after-init'."
(declare (indent 0) (debug (def-body)))
`(+ensure-after-init (lambda () ,@body)))
(defun +remember-prefix-arg (p-arg P-arg) (defun +remember-prefix-arg (p-arg P-arg)
"Display prefix ARG, in \"p\" and \"P\" `interactive' types. "Display prefix ARG, in \"p\" and \"P\" `interactive' types.
I keep forgetting how they differ." I keep forgetting how they differ."
(interactive "p\nP") (interactive "p\nP")
(message "p: %S P: %S" p-arg P-arg)) (message "p: %S P: %S" p-arg P-arg))
(defmacro +defvar (var value &optional _) (defmacro +defvar (var value &rest _)
"Quick way to `setq' a variable from a `defvar' form." "Quick way to `setq' a variable from a `defvar' form."
(declare (doc-string 3)) (declare (doc-string 3))
`(setq ,var ,value)) `(setq ,var ,value))
@ -133,7 +139,7 @@ If body executes without errors, MESSAGE...Done will be displayed."
`(let ((,msg ,message)) `(let ((,msg ,message))
(unwind-protect (progn (message "%s..." ,msg) (unwind-protect (progn (message "%s..." ,msg)
,@body) ,@body)
(message "%s... Done." ,msg))))) (message "%s...done" ,msg)))))
(defun +mapc-some-buffers (func &optional predicate) (defun +mapc-some-buffers (func &optional predicate)
"Perform FUNC on all buffers satisfied by PREDICATE. "Perform FUNC on all buffers satisfied by PREDICATE.
@ -171,7 +177,8 @@ active, or else the entire buffer."
(replace-match "\n\n")) (replace-match "\n\n"))
;; Insert a newline at the end. ;; Insert a newline at the end.
(goto-char (point-max)) (goto-char (point-max))
(unless (= (line-beginning-position) (line-end-position)) (unless (or (buffer-narrowed-p)
(= (line-beginning-position) (line-end-position)))
(insert "\n"))))) (insert "\n")))))
(defun +open-paragraph () (defun +open-paragraph ()

View File

@ -1,9 +1,9 @@
;;; system.el --- System-specific configuration -*- lexical-binding: t; -*- ;;; system.el --- Load system-dependendant settings -*- lexical-binding: t; -*-
;;; Commentary: ;;; Commentary:
;; When using Emacs on separate computers, some variables need different ;; When using Emacs on multiple computers, some variables and functions need
;; settings. This library contains functions and variables to work with ;; different definitions. This library is built to assist in working with
;; different system configurations for Emacs. ;; different system configurations for Emacs.
;;; Code: ;;; Code:
@ -15,145 +15,161 @@
:group 'emacs :group 'emacs
:prefix "system-") :prefix "system-")
;;; Variables ;;; Settings
(defcustom system-load-alist '((system-microsoft-p . windows) (defcustom system-load-directory (locate-user-emacs-file "systems"
(system-linux-p . linux)) "~/.emacs-systems")
"Alist describing which system Emacs is on. "The directory where system-specific configurations live."
Each cell is of the form (PREDICATE . SYSTEM), where PREDICATE is
a function of no arguments and SYSTEM is a string or symbol that
will be passed to `system-settings-load'.
This list need not be exhaustive; see `system-settings-load' for
more details on what happens if this alist is exhausted."
:type '(alist :key-type function :value-type (choice string symbol)))
(defcustom system-load-directory (locate-user-emacs-file "systems")
"The directory from which to load system-specific configurations."
:type 'file) :type 'file)
;; `defcustoms' defined here are best-guess defaults. ;; These `defcustom's are best-guess defaults.
(defcustom system-default-font (pcase system-type (defcustom system-default-font (cond
((or 'ms-dos 'windows-nt) ((memq system-type '(ms-dos windows-nt))
"Consolas") "Consolas")
(_ "monospace")) (t "monospace"))
"The font used for the `default' face." "The font used for the `default' face.
Set this in your system files."
:type 'string) :type 'string)
(defcustom system-default-height 100 (defcustom system-default-height 100
"The height used for the `default' face." "The height used for the `default' face.
Set this in your system files."
:type 'number) :type 'number)
(defcustom system-variable-pitch-font (pcase system-type (defcustom system-variable-pitch-font (cond
((or 'ms-dos 'windows-nt) ((memq system-type '(ms-dos windows-nt))
"Arial") "Arial")
(_ "sans-serif")) (t "sans-serif"))
"The font used for the `variable-pitch' face." "The font used for the `variable-pitch' face.
Set this in your system files."
:type 'string) :type 'string)
(defcustom system-variable-pitch-height 1.0 (defcustom system-variable-pitch-height 1.0
"The height used for the `variable-pitch' face. "The height used for the `variable-pitch' face.
A floating-point number is recommended, since that makes it A floating-point number is recommended, since that makes it
relative to the `default' face height." relative to the `default' face height.
Set this in your system files."
:type 'number) :type 'number)
(defcustom system-files-order '(:type :name :user)
"The order to load `system-files' in.
The elements of this list correspond to the keys in
`system-system'."
:type '(list (const :tag "System type" :type)
(const :tag "System name" :name)
(const :tag "Current user" :user)))
;;; Variables
(defvar system-system nil (defvar system-system nil
"The current system's symbol. "Plist of systems that Emacs is in.
Do not edit this by hand. Instead, call `system-get-system'.") The keys are as follows:
(defvar system-file nil - :name - `system-name'
"The current system's file for system-specific configuration. - :type - `system-type'
Do not edit this by hand. Instead, call `system-get-system-file'.") - :user - `user-login-name'
Each value is made safe to be a file name by passing through
`system--safe'.
Do not edit this by hand. Instead, call `system-get-systems'.")
(defvar system-files nil
"List of files to load for system-specific configuration.
Do not edit this by hand. Instead, call `system-get-system-files'.")
;;; Functions ;;; Functions
;; Convenience functions for systems (defun system--warn (message &rest args)
(defun system-microsoft-p () "Display a system-file warning message.
"Return non-nil if running in a Microsoft system." This function is like `warn', except it uses a `system' type."
(memq system-type '(ms-dos windows-nt)))
(defun system-linux-p ()
"Return non-nil if running on a Linux system."
(memq system-type '(gnu/linux)))
(defun system-warn (message &rest args)
"Display a wraning message made from (format-message MESSAGE ARGS...).
This function is like `warn', except it uses the `system' type."
(display-warning 'system (apply #'format-message message args))) (display-warning 'system (apply #'format-message message args)))
(defun system-get-system () (defun system--safe (str)
"Determine the current system." "Make STR safe for a file name."
(cl-loop for (p . s) in system-load-alist (let ((bad-char-regexp ))
if (with-demoted-errors (format "Problem running function `%s'" p) (downcase (string-trim
(funcall p)) (replace-regexp-in-string "[#%&{}\$!'\":@<>*?/ \r\n\t+`|=]+"
return (setq system-system s))) "-" str)
"-" "-"))))
(defun system-get-system-file (&optional system refresh-cache set-system-file-p) (defun system-get-systems ()
"Determine the current system's system-specific file. "Determine the current system(s).
The current system's file will be returned. The value of This system updates `system-system', which see."
`system-file' is set, /unless/ the parameter SYSTEM was passed to ;; Add system-name
this function and SET-SYSTEM-FILE-P is nil. If both SYSTEM and (setf (plist-get system-system :name)
SET-SYSTEM-FILE-P are non-nil, this function will still set (intern (system--safe (system-name))))
`system-file'. ;; Add system-type
(setf (plist-get system-system :type)
(intern (system--safe (symbol-name system-type))))
;; Add current user
(setf (plist-get system-system :user)
;; Use `user-real-login-name' in case Emacs gets called under su.
(intern (system--safe (user-real-login-name))))
system-system)
If SYSTEM is not passed, and `system-file' is set, simply return (defun system-get-files ()
its value /unless/ REFRESH-CACHE is non-nil, in which case "Determine the current systems' load-files.
`system-load-alist' will be looped through to find the The system load-files should live in `system-load-directory', and
appropriate system by testing the car of each cell there. When named using either the raw name given by the values of
one matches, use the cdr of that cell as SYSTEM. If none `system-system', or that name prepended with the type, e.g.,
matches, return nil. \"name-bob.el\", for a system named \"bob\".
This function will only look for system-specific files in The second form of file-name is to work around name collisions,
`system-load-directory'." e.g. if a there's a user named \"bob\" and a system named
(let* ((system* (or system \"bob\".
(and system-file (not refresh-cache))
(system-get-system))) This function updates `system-files'."
(file (expand-file-name (format "%s" system*) system-load-directory))) ;; Get systems
(when (or (not system) (system-get-systems)
(and system set-system-file-p)) ;; Re-set `system-files'
(setq system-file file)) (setq system-files nil)
file))
(let (ret)
(dolist (key (reverse system-files-order))
(let* ((val (plist-get system-system key))
(key-val (intern (system--safe (format "%s-%s" key val)))))
(push (list key-val val) ret)))
;; Update `system-files'.
(setq system-files ret)))
;;;###autoload ;;;###autoload
(defun system-settings-load (&optional system error nomessage) (defun system-settings-load (&optional error nomessage)
"Load system settings. "Load system settings from `system-files'.
Load settings from `system-file', or the `system-file' as Each list in `system-files' will be considered item-by-item; the
determined by SYSTEM, if passed. See `system-get-system-file' for first found file in each will be loaded.
details on how the `system-file' is determined.
ERROR determines how to deal with errors: if nil, warn the user ERROR determines how to deal with errors: if nil, warn the user
when `system-file' can't be found or when the system being used when no system-files can be found or when the system being used
can't be determined. If t, those are elevated to errors. If any cannot be determined. If t, these warnings are elevated to
other value, the errors are completely ignored. errors. Any other value ignores the warnings completely.
NOMESSAGE is passed directly to `load'." NOMESSAGE is passed directly to `load'."
(let ((file (system-get-system-file system))) (system-get-files)
(if file (if system-files
(condition-case e (let (files-loaded)
(load file nil nomessage) (dolist (ss system-files)
(t (cond ((eq error t) (signal (car e) (cdr e))) (catch :done
((null error) (system-warn "Couldn't find file `%s'." (dolist (s ss)
file))))) (let ((fn (expand-file-name (format "%s" s)
(funcall (cond ((eq error t) #'error) system-load-directory)))
((null error) #'system-warn) (when (load fn t nomessage)
(t #'ignore)) (push fn files-loaded)
"Could not determine the system being used.")))) (throw :done nil))))))
(unless files-loaded
;;;###autoload (cond ((eq error t) (error "Error loading system-files.")
(defun system-find-system-file (&optional system) (null error) (system--warn "Couldn't load system-files."))))
"Find the current system's system-file." files-loaded)
(interactive (list (completing-read "System file: " (funcall (cond ((eq error t) #'error)
(mapcar (lambda (a) (format "%s" (cdr a))) ((null error) #'system--warn)
system-load-alist) (t #'ignore))
nil t nil nil "Couldn't determine the system being used.")))
(format "%s" (system-get-system)))))
(find-file (cl-loop with file = (system-get-system-file system)
for cand in (list file
(concat file ".el"))
if (file-exists-p cand)
return cand
finally return cand)))
(provide 'system) (provide 'system)
;;; system.el ends here ;;; system.el ends here

10
systems/bob.el Normal file
View File

@ -0,0 +1,10 @@
;;; bob.el --- Customizations for "bob" -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:
(setq system-default-font "DejaVu Sans Mono"
system-default-height 105)
;;; bob.el ends here

5
systems/gnu-linux.el Normal file
View File

@ -0,0 +1,5 @@
;;; linux.el -*- lexical-binding: t; -*-
(setq system-default-height 105)
;;; linux.el ends here

23
systems/windows-nt.el Normal file
View File

@ -0,0 +1,23 @@
;;; windows.el --- Windows settings! -*- lexical-binding: t; -*-
;; Annoying gnu-tls bug; I "always" trust the certificate anyway, so let's be
;; insecure.
(setq network-security-level 'low
debug-on-error t)
;; Fonts
(setq system-default-font "Cascadia Mono"
system-default-height 90
system-variable-pitch-font "Carlito"
system-variable-pitch-height 1.2)
;; Add C:\Program Files\* and C:\Program Files (x86)\* to exec-path
(dolist (path (append (file-expand-wildcards "C:/Program Files/*")
(file-expand-wildcards "c:/Program Files (x86)/*")
;; Others...
(save-match-data
(split-string (getenv "PATH") ";" t))))
(add-to-list 'exec-path path :append))
;;; windows.el ends here