From 24297264d0c5dafe8e38e48e7fdd1b4b9e2aca56 Mon Sep 17 00:00:00 2001 From: rearman Date: Sat, 7 Jan 2023 13:20:41 -0500 Subject: [PATCH] Go to split config setup --- .gitignore | 4 +- init.el | 444 +--------------------------------------------------- work-eqs.el | 145 ----------------- 3 files changed, 10 insertions(+), 583 deletions(-) delete mode 100644 work-eqs.el diff --git a/.gitignore b/.gitignore index 0333a53..dc85ccf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ * !/eshell/alias -!init.el -!work-eqs.el +!/config !early-init.el +!init.el diff --git a/init.el b/init.el index 22372bd..980f8eb 100644 --- a/init.el +++ b/init.el @@ -1,444 +1,16 @@ ;; -*- lexical-binding: t; -*- ;; SETUP FOR SHARED WINDOWS/WSL INIT (if (eq system-type 'windows-nt) - (progn (defvar work-eqns (expand-file-name "work-eqs.el" user-emacs-directory)) - (setq delete-by-moving-to-trash t)) + (progn (setq delete-by-moving-to-trash t)) nil) -(load work-eqns) - -;; PACKAGES -;; NEW STRAIGHT.EL CONFIG -(defvar bootstrap-version) -(let ((bootstrap-file - (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory)) - (bootstrap-version 6)) - (unless (file-exists-p bootstrap-file) - (with-current-buffer - (url-retrieve-synchronously - "https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el" - 'silent 'inhibit-cookies) - (goto-char (point-max)) - (eval-print-last-sexp))) - (load bootstrap-file nil 'nomessage)) - -(straight-use-package 'use-package) - -(use-package straight - :custom (straight-use-package-by-default t)) - -(use-package company - :custom - (company-idle-delay 0) - (company-minimum-prefix-length 3) - (company-selection-wrap-around t) - (company-dabbrev-other-buffers t) - (company-dabbrev-code-other-buffers t) - (company-dabbrev-downcase nil) - (company-dabbrev-ignore-case t) - :config - (global-company-mode t)) - -(use-package expand-region - :bind (("C-=" . er/expand-region))) - -(use-package magit - :init - (message "Loading Magit...") - :config - (message "Loaded Magit!") - :bind (("C-x g" . magit-status))) - ;; :map magit-status-mode-map - ;; ("q" . magit-quit-session))) - -(use-package gnuplot-mode) - -(use-package openwith - :config - (openwith-mode t) - (setq openwith-associations '(("\\.pdf\\'" "sumatrapdf" (file)) - ("\\.xls\\'" "excel" (file)) - ("\\.xlsx\\'" "excel" (file)) - ("\\.doc\\'" "word" (file)) - ("\\.docx\\'" "word" (file)) - ("\\.adpro\\'" "PoductivitySuite" (file))))) -(use-package s) - -(use-package dash) - -;; SETQ AND DEFAULTS -(setq-default indicate-empty-lines t - fill-column 80 - read-file-name-completion-ignore-case t - read-buffer-completion-ignore-case t - cursor-type 'bar - cursor-in-non-selected-windows nil) - -(setq default-directory "~/" - inhibit-startup-message t - initial-scratch-message nil - server-client-instructions nil - require-final-newline t - use-short-answers t - mode-line-compact t - make-backup-files nil - auto-save-default nil - confirm-nonexistent-file-or-buffer nil - show-paren-delay 0 - show-paren-style 'expression - blink-matching-paren 'jump - global-hl-line-sticky-flag t - echo-keystrokes 0.01 - save-interprogram-paste-before-kill t) - -;; OPTIONS -(recentf-mode t) -(fringe-mode 1) -(menu-bar-mode -1) -(tool-bar-mode -1) -(scroll-bar-mode -1) -(show-paren-mode t) -(auto-fill-mode t) -(midnight-mode t) -(mouse-avoidance-mode 'animate) -(column-number-mode t) -(delete-selection-mode t) -(global-hl-line-mode t) -(global-prettify-symbols-mode t) -(global-display-line-numbers-mode t) -(set-face-background 'show-paren-match nil) -(set-face-underline 'show-paren-match t) -(add-to-list 'default-frame-alist '(background-color . "#cae0a6")) - -(unless (display-graphic-p) - (xterm-mouse-mode 1)) - -;; DEFUNS -(defun open-line-below () - "Creates a new empty line below the current line." - (interactive) - (end-of-line) - (newline) - (indent-for-tab-command)) - -(defun open-line-above () - "Creates a new empty line above the current line. -Can't go prev line first, edge case of beginning of buffer." - (interactive) - (beginning-of-line) - (newline) - (previous-line) - (indent-for-tab-command)) - -(defun kill-bword-or-region () - "Kill region if active, otherwise kill back one word." - (interactive) - (if (region-active-p) - (call-interactively 'kill-region) - (call-interactively 'backward-kill-word))) - -(defun backward-kill-line () - "Kill back to beginning of line from point." - (interactive) - (kill-line 0)) - -(defun backward-join-line () - "A wrapper for join-line to make it go in the right direction." - (interactive) - (join-line 0)) - -(defun edit-init () - "Bring up init.el for editing." - (interactive) - (find-file user-init-file)) - -(defun edit-work-eqs () - "Bring up work-eqs.el for editing." - (interactive) - (find-file work-eqns)) - -(defun toggle-window-split () - "If two windows are open, toggle their split layout between vert. and horiz. -Stolen from http://whattheemacsd.com" - (interactive) - (if (= (count-windows) 2) - (let* ((this-win-buffer (window-buffer)) - (next-win-buffer (window-buffer (next-window))) - (this-win-edges (window-edges (selected-window))) - (next-win-edges (window-edges (next-window))) - (this-win-2nd (not (and (<= (car this-win-edges) - (car next-win-edges)) - (<= (cadr this-win-edges) - (cadr next-win-edges))))) - (splitter - (if (= (car this-win-edges) - (car (window-edges (next-window)))) - 'split-window-horizontally - 'split-window-vertically))) - (delete-other-windows) - (let ((first-win (selected-window))) - (funcall splitter) - (if this-win-2nd (other-window 1)) - (set-window-buffer (selected-window) this-win-buffer) - (set-window-buffer (next-window) next-win-buffer) - (select-window first-win) - (if this-win-2nd (other-window 1)))))) - -(defun rotate-windows () - "Rotate your windows. -Stolen from http://whattheemacsd.com" - (interactive) - (cond ((not (> (count-windows)1)) - (message "You can't rotate a single window!")) - (t - (setq i 1) - (setq numWindows (count-windows)) - (while (< i numWindows) - (let* ( - (w1 (elt (window-list) i)) - (w2 (elt (window-list) (+ (% i numWindows) 1))) - - (b1 (window-buffer w1)) - (b2 (window-buffer w2)) - - (s1 (window-start w1)) - (s2 (window-start w2)) - ) - (set-window-buffer w1 b2) - (set-window-buffer w2 b1) - (set-window-start w1 s2) - (set-window-start w2 s1) - (setq i (1+ i))))))) - -;; (defadvice magit-status (around magit-fullscreen activate) -;; "Stolen from http://whattheemacsd.com" -;; (window-configuration-to-register :magit-fullscreen) -;; ad-do-it -;; (delete-other-windows)) -;; -;; (defun magit-quit-session () -;; "Restores the previous window configuration and kills the magit buffer. -;; Stolen from http://whattheemacsd.com" -;; (interactive) -;; (kill-matching-buffers "magit" nil t) -;; (jump-to-register :magit-fullscreen)) - -(defun smart-beginning-of-line () - "Move point to first non-whitespace character or beginning-of-line. -If point was already at that position, move point to beginning of line. -Stolen from BrettWitty's dotemacs github repo." - (interactive "^") - (let ((oldpos (point))) - (back-to-indentation) - (and (= oldpos (point)) - (beginning-of-line)))) - -(defun unfuck-aveva-license () - "Remove the offending xml files when aveva can't find the license." - (interactive) - (let ((xml1 "c:/ProgramData/AVEVA/Licensing/License API2/Data/LocalAcquireInfo.xml") - (xml2 "c:/ProgramData/AVEVA/Licensing/License API2/Data/LocalBackEndAcquireInfo.xml")) - (when (file-exists-p xml1) (delete-file xml1)) - (when (file-exists-p xml2) (delete-file xml2)))) - -(defun eshell-send-on-close-paren () - "Makes eshell act somewhat like genera. -Makes a closing paren execute the sexp. Currently in test, look out for errors." - (interactive) - (insert-char ?\)) - (let ((p (point))) - ;;(eshell-bol) - ;;(syntax-ppss-flush-cache (point)) - ;;(goto-char p) - (cond ((= 0 (car (syntax-ppss))) - (eshell-send-input)) - ((< (car (syntax-ppss)) 0) - (message "Check flush-cache")) - ((t nil))))) - -(defun slot/get-queries (&optional pairs) - "Get multiple `query-replace' pairs from the user. -PAIRS is a list of replacement pairs of the form (FROM . TO). -Stolen from https://tony-zorman.com/posts/query-replace/2022-08-06-query-replace-many.html" - (-let* (((from to delim arg) - (query-replace-read-args - (s-join " " - (-non-nil - (list "Query replace many" - (cond ((eq current-prefix-arg '-) "backward") - (current-prefix-arg "word")) - (when (use-region-p) "in region")))) - nil)) ; no regexp-flag - (from-to (cons (regexp-quote from) - (s-replace "\\" "\\\\" to)))) - ;; HACK: Since the default suggestion of replace.el will be - ;; the last one we've entered, an empty string will give us - ;; exactly that. Instead of trying to fight against this, - ;; use it in order to signal an exit. - (if (-contains? pairs from-to) - (list pairs delim arg) - (slot/get-queries (push from-to pairs))))) - -(defun slot/replace-string-many - (pairs &optional delimited start end backward region-noncontiguous-p) - "Like `query-replace', but query for several replacements. -Query for replacement pairs until the users enters an empty -string (but see `slot/get-queries'). - -Refer to `query-replace' and `perform-replace' for what the other -arguments actually mean. -Stolen from https://tony-zorman.com/posts/query-replace/2022-08-06-query-replace-many.html -Edited and renamed to remove the Query." - (interactive - (let ((common (slot/get-queries))) - (list (nth 0 common) (nth 1 common) - (if (use-region-p) (region-beginning)) - (if (use-region-p) (region-end)) - (nth 2 common) - (if (use-region-p) (region-noncontiguous-p))))) - (perform-replace - (concat "\\(?:" (mapconcat #'car pairs "\\|") "\\)") ; build query - (cons (lambda (pairs _count) - (cl-loop for (from . to) in pairs - when (string-match from (match-string 0)) - return to)) - pairs) - nil :regexp - delimited nil nil start end backward region-noncontiguous-p)) - -(defun slot/query-replace-many - (pairs &optional delimited start end backward region-noncontiguous-p) - "Like `query-replace', but query for several replacements. -Query for replacement pairs until the users enters an empty -string (but see `slot/get-queries'). - -Refer to `query-replace' and `perform-replace' for what the other -arguments actually mean. -Stolen from https://tony-zorman.com/posts/query-replace/2022-08-06-query-replace-many.html -Edited and renamed to remove the Query." - (interactive - (let ((common (slot/get-queries))) - (list (nth 0 common) (nth 1 common) - (if (use-region-p) (region-beginning)) - (if (use-region-p) (region-end)) - (nth 2 common) - (if (use-region-p) (region-noncontiguous-p))))) - (perform-replace - (concat "\\(?:" (mapconcat #'car pairs "\\|") "\\)") ; build query - (cons (lambda (pairs _count) - (cl-loop for (from . to) in pairs - when (string-match from (match-string 0)) - return to)) - pairs) - :query :regexp - delimited nil nil start end backward region-noncontiguous-p)) - -;; ORG SETTINGS AND DEFUNS -(defun erfassen-zettel () - "Add a new zettel to the kasten. -Creates a new file -name.org in ~/org/kasten." - (interactive) - (let ((name (read-string "Zettel-Name: "))) - (expand-file-name (format "%s-%s.org" (format-time-string "%Y-%m-%d-%H%M") name) "~/org/kasten/"))) - -(defun org-auto-archive () - "Automatically archive completed tasks in an org file. -Intended for use as an after-save-hook." - (interactive) - (org-map-entries - (lambda () - (org-archive-subtree) - (setq org-map-continue-from (org-element-property :begin (org-element-at-point)))) - "TODO=\"DONE\"|TODO=\"CANCELLED\"" - 'file) - (save-buffer)) - -(setq org-M-RET-may-split-line nil - org-startup-folded t - org-reverse-note-order t - org-use-fast-todo-selection 'expert - org-agenda-start-on-weekday nil - org-catch-invisible-edits 'show - org-directory "~/org" - org-agenda-files '("~/org/" - "~/org/kasten/") - org-refile-targets '((nil :maxlevel . 9) - (org-agenda-files :maxlevel . 9)) - org-default-notes-file (concat org-directory "/notes.org") - safe-local-variable-values '((after-save-hook org-auto-archive)) - org-todo-keywords '((sequence "TODO(t@)" - "WAITING(w@)" - "IN-PROGRESS(i@)" - "DELEGATED(l@)" - "APPT(a@)" "|" - "DONE(d@)" - "CANCELLED(c@)")) - org-capture-templates '(("n" "Note" entry (file+olp org-default-notes-file "Notes") "* %u %?") - ("t" "TODO" entry (file+olp org-default-notes-file "Tasks") "* TODO %? \n %u") - ("s" "Service" entry (file+olp org-default-notes-file "Service") "* TODO %? \n %u") - ("z" "Zettel" entry (file erfassen-zettel) "* %? ::")) - org-agenda-custom-commands '(("n" "Agenda and all TODOs" - ((agenda "") (alltodo ""))) - ("u" "Unscheduled TODOs" - alltodo "" ((org-agenda-skip-function - (lambda nil - (org-agenda-skip-entry-if 'scheduled - 'deadline - 'regexp "\n]+>"))) - (org-agenda-overriding-header "Unscheduled TODO entries: "))))) - -;; HOOKS -(add-hook 'before-save-hook 'whitespace-cleanup) -(add-hook 'dired-mode-hook 'dired-hide-details-mode t) - -;; PUTS AND PUSHES -(put 'upcase-region 'disabled nil) -(put 'downcase-region 'disabled nil) -(put 'narrow-to-region 'disabled nil) -(put 'dired-find-alternate-file 'disabled nil) - -;; BINDINGS -;; USER SPACE -(global-set-key (kbd "C-c a") 'org-agenda) -(global-set-key (kbd "C-c b") 'buffer-menu-other-window) -(global-set-key (kbd "C-c c") 'org-capture) -(global-set-key (kbd "C-c ei") 'edit-init) -(global-set-key (kbd "C-c r") 'rotate-windows) -(global-set-key (kbd "C-c s") 'eshell) -(global-set-key (kbd "C-c t") 'toggle-window-split) -(global-set-key (kbd "C-c w") 'edit-work-eqs) -(global-set-key (kbd "") 'recentf-open-files) -;; OVERRIDES -(global-set-key [remap move-beginning-of-line] 'smart-beginning-of-line) -(global-set-key (kbd "M-j") 'backward-join-line) -(global-set-key (kbd "M-S-j") 'join-line) -(global-set-key (kbd "C-S-k") 'kill-whole-line) -(global-set-key (kbd "C-o") 'open-line-below) -(global-set-key (kbd "M-o") 'open-line-above) -(global-set-key (kbd "M-s .") 'isearch-forward-thing-at-point) -(global-set-key (kbd "M-s M-.") 'isearch-forward-symbol-at-point) -(global-set-key (kbd "C-u") 'backward-kill-line) -(global-set-key (kbd "C-w") 'kill-bword-or-region) -(global-set-key (kbd "C-z") 'zap-up-to-char) -(global-set-key (kbd "C-M-z") 'eval-region) -(global-set-key (kbd "C-'") 'universal-argument) -(global-set-key (kbd "C-.") 'next-window-any-frame) -(global-set-key (kbd "C-,") 'previous-window-any-frame) -(global-set-key (kbd "C-x C-b") 'buffer-menu) -(global-set-key (kbd "C-x .") 'next-buffer) -(global-set-key (kbd "C-x ,") 'previous-buffer) -(global-set-key (kbd "C-%") 'replace-regexp) -(global-set-key (kbd "M-%") 'slot/replace-string-many) -(global-set-key (kbd "C-M-%") 'slot/query-replace-many) -;; MODE-SPECIFIC -(add-hook 'eshell-mode-hook (lambda () - (define-key eshell-mode-map (kbd ")") 'eshell-send-on-close-paren))) -(add-hook 'org-mode-hook (lambda () - (define-key org-mode-map (kbd "C-'") nil) - (define-key org-mode-map (kbd "C-,") nil))) -(add-hook 'org-agenda-mode-hook (lambda () - (define-key org-agenda-mode-map (kbd "C-'") nil) - (define-key org-agenda-mode-map (kbd "C-,") nil))) +(load (expand-file-name "config/work-eqs.el" user-emacs-directory)) +(load (expand-file-name "config/package-config.el" user-emacs-directory)) +(load (expand-file-name "config/setq-defaults.el" user-emacs-directory)) +(load (expand-file-name "config/defuns.el" user-emacs-directory)) +(load (expand-file-name "config/org-setup.el" user-emacs-directory)) +(load (expand-file-name "config/hooks-puts.el" user-emacs-directory)) +(load (expand-file-name "config/bindings.el" user-emacs-directory)) (custom-set-variables ;; custom-set-variables was added by Custom. diff --git a/work-eqs.el b/work-eqs.el deleted file mode 100644 index d217c77..0000000 --- a/work-eqs.el +++ /dev/null @@ -1,145 +0,0 @@ -;; WORK (NON-EDITING) RELATED DEFUNS -(defun square (x) - "Calculate the square of a value." - (expt x 2)) - -(defun cube (x) - "Calculate the cube of a value." - (expt x 3)) - -(defun inv (x) - "Calculate the inverse of a value." - (/ 1 x)) - -(defun scaleval (pmax pmin emax emin &optional ai) - "Calculate the slope and offset given PLC Max/Min and Eng. Max/Min. -With optional argument 'ai', also calculate a final scaled value from an input." - (let ((div (/ (- pmax pmin) (- (float emax) (float emin))))) - (let ((ofst (- emin (/ pmin div)))) - (if (eq nil ai) - (list div ofst) - (let ((final (+ ofst (/ ai div)))) - (list div ofst final)))))) - -(defun cfm-circ (fpm radius) - "Calculate the CFM of a circular duct given fpm and radius (in)." - (list (* pi fpm (square (/ radius 12))))) - -(defun cfm-rect (fpm width height) - "Calculate the CFM of a rectangular duct given fpm, width (in) and height (in)." - (list (* fpm (/ width 12) (/ height 12)))) - -(defun pid-tune (Ku Tu &optional p-type) - "Use the Ziegler-Nichols method to tune a P, PI or PID loop. -Takes Ku, Tu and optional p-type (P, PI, or PID [default]) as arguments, - and returns appropriate kp, ki, and kd." - (cond ((or (equal 'p p-type) - (equal 'P p-type)) - (list (* 0.5 Ku))) - ((or (equal 'pi p-type) - (equal 'PI p-type)) - (list (* 0.45 Ku) (/ (* 0.54 Ku) Tu))) - (t (list (* 0.6 Ku) (/ (* 1.2 Ku) Tu) (/ (* 3.0 Ku Tu) 40))))) - -(defun gn-water-per-lb (temp humidity) - "Calculate the grains of water per lb of air, given temperature (F) and humidity (%). -Returns a list of Sat. Water Press., Hum. Ratio, and Gns water/lb air." - (let ((sat-water-press (+ .0182795 - (* temp .001029904) - (* (square temp) 0.00002579408) - (* (cube temp) (* 2.400493 (expt 10 -7))) - (* (expt temp 4) (* 8.100939 (expt 10 -10))) - (* (expt temp 5) (* 3.256805 (expt 10 -11))) - (* (expt temp 6) (* -1.001922 (expt 10 -13))) - (* (expt temp 7) (* 2.44161 (expt 10 -16)))))) - (let ((hum-press (* (/ humidity 100.0) sat-water-press))) - (let ((hum-ratio (/ (* hum-press 0.62198) (- 14.7 hum-press)))) - (let ((gns-water-lb-air (* hum-ratio 7000))) - (list sat-water-press hum-ratio gns-water-lb-air)))))) - -(defun mm-to-in (mm) - "Convert milimeters to inches." - (/ mm 25.4)) - -(defun in-to-mm (in) - "Convert milimeters to inches." - (* in 25.4)) - -(defun k-to-c (tempk) - "Convert degrees Kelvin to degrees Celsius." - (- tempk 273.15)) - -(defun c-to-k (tempc) - "Convert degrees Celsius to degrees Kelvin." - (+ tempc 273.15)) - -(defun c-to-f (tempc) - "Convert degrees Celsius to degrees Fahrenheit." - (+ (* tempc 1.8) 32.0)) - -(defun f-to-c (tempf) - "Convert degrees Fahrenheit to degrees Celsius." - (/ (- tempf 32.0) 1.8)) - -(defun k-to-f (tempk) - "Convert degrees Kelvin to degrees Fahrenheit. -Applies `c-to-f' to `k-to-c'." - (c-to-f (k-to-c tempk))) - -(defun f-to-k (tempf) - "Convert degrees Fahrenheit to degrees Kelvin. -Applies `c-to-k' to `f-to-c'." - (c-to-k (f-to-c tempf))) - -(defun max-counts (resolution) - "Calculate the max count for a PLC analog, given card's bit-resolution. -Formula is 1 - 2^(resolution)" - (- (expt 2 resolution) 1)) - -(defun volts-to-counts (vin vmax resolution) - "Convert a voltage signal to a PLC count. -Calculates a ratio of vin/vmax, then scales by `max-counts'." - (* (/ (float vin) (float vmax)) (float (max-counts resolution)))) - -(defun counts-to-volts (cin vmax resolution) - "Convert a PLC count to a voltage. -Calculates a ratio of cin/`max-counts', then multiplies by vmax." - (* (/ cin (float (max-counts resolution))) vmax)) - -(defun eff-imp (r1 &optional r2) - "Calculate the effective input impedance, given two resistances. -For use in `amps-to-volts' and related. The handling of only one resistance -given is done here, instead of doing it in every function that uses this." - (if (eq nil r2) - r1 - (inv (+ (inv (float r1)) (inv (float r2)))))) - -(defun amps-to-volts (amps r1 &optional r2) - "Calculate the voltage, given amperage and impedance. -Multiplies the amperage by the effective impedance calculated with `eff-imp'." - (* amps (eff-imp r1 r2))) - -(defun volts-to-amps (volts r1 &optional r2) - "Calculate the amperage, given voltage and impedance. -Divides the voltage by the effective impedance calculated with `eff-imp'." - (/ volts (eff-imp r1 r2))) - -(defun amps-to-counts (amps vmax resolution r1 &optional r2) - "Convert an amp signal to PLC Counts. -Converts the amperage to a voltage using `amps-to-volts' (with r1 and optional r2), -then applies `volts-to-counts' to the resulting voltage, vmax, and resolution." - (volts-to-counts (amps-to-volts amps r1 r2) vmax resolution)) - -(defun count-range (type upper lower vmax resolution &optional r1 r2) - "Given an upper and lower signal, return the list of upper and lower PLC counts. -Type takes either a v or an i, corresponding to a voltage or current signal. -With a current signal, use r1 and maybe r2 to calculate `amps-to-counts'. -Otherwise ignore r1/r2 and calculate `volts-to-counts'." - (cond ((or (equal 'v type) - (equal 'V type)) - (list (volts-to-counts upper vmax resolution) - (volts-to-counts lower vmax resolution))) - ((or (equal 'i type) - (equal 'I type)) - (list (amps-to-counts upper vmax resolution r1 r2) - (amps-to-counts lower vmax resolution r1 r2))))) -- 2.39.5