diff --git a/lisp/04-custom-init.el b/lisp/04-custom-init.el index d2b1d88..d2b29dd 100644 --- a/lisp/04-custom-init.el +++ b/lisp/04-custom-init.el @@ -8,7 +8,7 @@ (defvar autosave-dir (expand-file-name "~/.emacs.d/autosave/") "Set the default location of autosaves.") (cond ((member "PragmataPro Liga" (font-family-list)) - (set-face-attribute 'default nil :font "PragmataPro Liga-14"))) + (set-face-attribute 'default nil :font "PragmataPro Liga-16"))) (setq initial-scratch-message nil backup-directory-alist (list (cons ".*" backup-dir)) @@ -39,8 +39,13 @@ (global-subword-mode 1) ;; Indent w/spaces only -(setq indent-tabs-mode nil) -(setq-default indent-tabs-mode nil) +(setq indent-tabs-mode nil + tab-width 4) +(setq-default indent-tabs-mode nil + tab-width 4) +;; This will expand 4 8 12 16 ... 200 +(setq tab-stop-list (number-sequence 4 200 4)) + ;; Prevent stale elisp bytecode (setq load-prefer-newer t) ;; Add newline on save @@ -53,7 +58,7 @@ ;; Paste at current point, not mouse location when "middle-clicking" (setq mouse-yank-at-point t) -(add-hook 'before-save-hook 'delete-trailing-whitespace) +(add-hook 'prog-mode-hook (lambda() (add-hook 'before-save-hook #'delete-trailing-whitespace t t))) ;; Set auth source ;; (setq auth-sources '("~/.authinfo.gpg")) @@ -61,8 +66,8 @@ ;; Set window location/size (if (eq system-type 'darwin) (progn - (set-frame-position (selected-frame) 950 906) - (set-frame-height (selected-frame) 60) + (set-frame-position (selected-frame) 811 816) + (set-frame-height (selected-frame) 55) (set-frame-width (selected-frame) 220)) (message "Don't configure location for other OSes")) diff --git a/lisp/05-custom-functions.el b/lisp/05-custom-functions.el index f1495af..30f8454 100644 --- a/lisp/05-custom-functions.el +++ b/lisp/05-custom-functions.el @@ -114,16 +114,32 @@ "Insert boilerplate into newly create roam note." (interactive) (let ((title (leo/org-global-prop-value "TITLE")) + (setupfile (leo/org-global-prop-value "SETUPFILE")) (startup (leo/org-global-prop-value "STARTUP"))) - (when (not startup) + ;; If we have neither SETUPFILE nor STARTUP + (when (and title + (not setupfile) + (not startup)) (kill-region (point-min) (point-max)) (goto-char (point-min)) - (insert (format "#+TITLE: %s\n" title)) - (insert "#+STARTUP: showall\n") + (insert (format "#+TITLE: %s\n" title)) + (insert "#+SETUPFILE: setup.org\n") (insert "\n") (insert "* Metadata:\n") (insert "** Tags: ") - (goto-char (point-max))))) + (goto-char (point-max))) + + ;; If we only have STARTUP + (when (and title + startup + (not setupfile)) + (goto-char (point-min)) + (search-forward "STARTUP") + (beginning-of-line) + (kill-line) + (insert "#+SETUPFILE: setup.org") + (message "Updated Global Properties")) + )) (defun leo/org-narrow-prev-tree () "When in a narrowed region, this will take you to the previous heading and narrow." @@ -167,6 +183,45 @@ (message "Presenting") )) +(defun leo/org-roam-reformat-tags () + "Search for Tags: in document and replace the old single-line format with a newline separated list." + (interactive) + (save-excursion + (goto-char (point-min)) + (if (re-search-forward "Tags:") + (progn + (replace-regexp "Tags: \\[" "Tags:\n- [" nil (point-at-bol) (point-at-eol)) + (replace-regexp "\\] \\[" "] \n- [" nil (point-at-bol) (point-at-eol)) + (message "Tags formatted!") + ) + (message "Tags not found, format aborted") + ))) + +(defun leo/org-table-slurp () + "Slurp a line below the table into current cell." + (interactive) + (save-excursion + (forward-word) + (beginning-of-line) + (kill-line)) + (yank)) + +(defun leo/auth-source-unfunc (secret) + "Unfurl the SECRET." + (if (functionp secret) + (funcall secret) + secret)) + +(defun leo/url-encode (str) + "Poor man's url-encode of STR." + (replace-regexp-in-string "@" '"%40" str nil t)) + +(defun leo/salesforce-login (un) + "Login to Salesforce with UN and password from auth-source." + (interactive) + (let ((secret (plist-get (nth 0 (auth-source-search :max 1 :user un)) :secret)) + (host (plist-get (nth 0 (auth-source-search :max 1 :user un)) :host))) + (browse-url (concat "https://" host "/login.jsp?pw=" (leo/auth-source-unfunc secret) "&un=" (leo/url-encode un))))) -(provide '05-custom-functions) + (provide '05-custom-functions) ;;; 05-custom-functions.el ends here diff --git a/lisp/07_5-custom-created-packages.el b/lisp/07_5-custom-created-packages.el index 8cb0559..4aff431 100644 --- a/lisp/07_5-custom-created-packages.el +++ b/lisp/07_5-custom-created-packages.el @@ -6,6 +6,7 @@ (require 'sfdx) (require 'convert-to-table) +(require 'ol-dired) (provide '07_5-custom-created-packages) ;;; 07_5-custom-created-packages.el ends here diff --git a/lisp/08-custom-packages.el b/lisp/08-custom-packages.el index b657a35..484f237 100644 --- a/lisp/08-custom-packages.el +++ b/lisp/08-custom-packages.el @@ -33,6 +33,9 @@ ;;; Code: +(use-package use-package-ensure-system-package + :ensure t) + (use-package ag :ensure t) @@ -346,7 +349,20 @@ ;; http://web-mode.org/ (use-package web-mode :ensure t - :mode "\\.html?\\'") + ;; :mode (("\\.html?\\'" . web-mode) + ;; ("\\.xml?\\'" . web-mode)) + :hook (html-mode xml-mode) + ) + +;; https://github.com/smihica/emmet-mode +(use-package emmet-mode + :ensure t + :hook (sgml-mode html-mode web-mode css-mode)) + +(use-package dash-at-point + :if (eq system-type 'darwin) + :ensure-system-package + ("/Applications/Dash.app" . "brew cask install dash")) ;; https://github.com/joshwnj/json-mode (use-package json-mode @@ -412,6 +428,7 @@ (org-agenda-files :maxlevel . 3)) org-directory "~/Dropbox/Org" org-default-notes-file (concat org-directory "/todo.org") + org-src-fontify-natively t org-startup-folded t org-startup-indented t org-startup-align-all-tables t @@ -497,13 +514,14 @@ :commands org-bullets-mode :hook (org-mode . org-bullets-mode) :config - (set-face-attribute 'org-level-1 nil :height 1.3) - (set-face-attribute 'org-level-2 nil :height 1.15) - (set-face-attribute 'org-level-3 nil :height 1.1) - (set-face-attribute 'org-level-4 nil :height 1.08) - (set-face-attribute 'org-level-5 nil :height 1.05) - (set-face-attribute 'org-scheduled-today nil :height 1.0) - (set-face-attribute 'org-agenda-date-today nil :height 1.1)) + (setq org-bullets-bullet-list '( "○" "◉" "●" "●" "●" "●" "●")) + (set-face-attribute 'org-level-1 nil :height 1.5) + (set-face-attribute 'org-level-2 nil :height 1.0) + (set-face-attribute 'org-level-3 nil :height 1.0) + (set-face-attribute 'org-level-4 nil :height 1.0) + (set-face-attribute 'org-level-5 nil :height 1.0) + (set-face-attribute 'org-scheduled-today nil :height 2.0) + (set-face-attribute 'org-agenda-date-today nil :height 2.0)) ;; https://orgmode.org/worg/org-contrib/org-protocol.html (use-package org-protocol @@ -595,9 +613,10 @@ ("M-c" . capitalize-dwim) ("M-l" . downcase-dwim) ("M-" . sfdx/next-component-file) - ("C-x C-l s p" . sfdx/create-project) - ("C-x C-l s c" . sfdx/create-component) - ("C-x C-l s d" . sfdx/deploy-component-or-project) + ("C-x C-l s" . sfdx/transient-action) + ;; ("C-x C-l s p" . sfdx/create-project) + ;; ("C-x C-l s c" . sfdx/create-component) + ;; ("C-x C-l s d" . sfdx/deploy-component-or-project) ) ;; https://github.com/nflath/sudo-edit diff --git a/lisp/custom/convert-to-table.el b/lisp/custom/convert-to-table.el index c745e24..88ee241 100644 --- a/lisp/custom/convert-to-table.el +++ b/lisp/custom/convert-to-table.el @@ -7,8 +7,8 @@ (defun leo/remove-excess-line-breaks (input) "Remove excess line breaks from INPUT." (let ((mylist (split-string input "\n"))) - (setq mylist (remove-duplicates mylist :test 'string=)) - (delete "" mylist) + ;; (setq mylist (remove-duplicates mylist :test 'string=)) + ;; (delete "" mylist) (string-join mylist "\n") )) diff --git a/lisp/custom/ol-dired.el b/lisp/custom/ol-dired.el new file mode 100644 index 0000000..da36a3e --- /dev/null +++ b/lisp/custom/ol-dired.el @@ -0,0 +1,17 @@ +;;; ol-dired.el --- Support for links to dired + +;;; Commentary: + +;;; Code: +(require 'ol) + +(defcustom org-dired-command 'dired + "The Emacs command to be used to display a dired buffer." + :group 'org-link + :type '(dired)) + +(org-link-set-parameters "dired" + :follow org-dired-command) + +(provide 'ol-dired) +;;; ol-dired.el ends here diff --git a/lisp/custom/sfdx.el b/lisp/custom/sfdx.el index f53d6d9..5eab5b8 100644 --- a/lisp/custom/sfdx.el +++ b/lisp/custom/sfdx.el @@ -4,6 +4,9 @@ ;;; Code: +(require 'transient) + + (defvar sfdx-create-css) (setq-default sfdx-create-css t) @@ -58,13 +61,31 @@ (defun sfdx--deploy (component comp-name) "Internal function to deploy COMP-NAME asyncronously or project if COMPONENT is nil after validations." - (let ((process "sfdx-deploy-output") - (cd-dir (locate-dominating-file buffer-file-name "force-app")) - (output-path (concat (locate-dominating-file buffer-file-name "force-app") "force-app/main/default")) - ) + (let ((process "sfdx-deploy") + (buffer "*sfdx-output*") + (cd-dir (expand-file-name (locate-dominating-file buffer-file-name "force-app"))) + (output-path (concat (locate-dominating-file buffer-file-name "force-app") "force-app/main/default"))) (if component - (async-start-process process "sh" (lambda (result) (message "Deploy Process Finished")) "-c" (concat "cd " cd-dir "; sfdx force:source:deploy --sourcepath force-app/main/default/lwc/" comp-name " --loglevel fatal")) - (async-start-process process "sh" (lambda (result) (message "Deploy Process Finished")) "-c" (concat "cd " cd-dir "; sfdx force:source:deploy --sourcepath force-app/main/default/ --loglevel fatal")) + (progn + (delete-other-windows) + (split-window-below 40) + (other-window 1) + (switch-to-buffer buffer) + (erase-buffer) + (local-set-key (kbd "q") 'delete-window) + (insert (format "Starting deployment of %s...\n" comp-name)) + (start-process process buffer "sh" "-c" (concat "cd " cd-dir "; sfdx force:source:deploy --sourcepath ./force-app/main/default/lwc/" comp-name " --loglevel fatal")) + ) + (progn + (delete-other-windows) + (split-window-below 40) + (other-window 1) + (switch-to-buffer buffer) + (erase-buffer) + (local-set-key (kbd "q") 'delete-window) + (insert "Starting deployment of project...\n") + (start-process process buffer "sh" "-c" (concat "cd " cd-dir "; sfdx force:source:deploy --sourcepath ./force-app/main/default/ --loglevel fatal")) + ) ) ) ) @@ -81,10 +102,10 @@ (if (string= current-folder "lwc") (prog1 ;; Not in a component, deploy project. - (message "Deploying Project...") - (sfdx--deploy nil current-folder)) + ;; (message "Deploying Project...") + (sfdx--deploy nil current-folder)) ;; In a component, deploy component. - (message "Deploying Component...") + ;; (message "Deploying Component...") (sfdx--deploy t current-folder))) (prog1 @@ -92,8 +113,8 @@ (if (locate-dominating-file buffer-file-name "force-app") (prog1 ;; In project, deploy project. - (message "Deploying Project...") - (sfdx--deploy nil current-folder)) + ;; (message "Deploying Project...") + (sfdx--deploy nil current-folder)) (prog1 ;; Not in an SFDX project. (message "You are not in a component folder or an SFDX project!")) @@ -103,5 +124,19 @@ ) ) +(defun sfdx/retrieve-component () + "Retrieve the source for the current component (destructively overwrites)." + (interactive) + (message "can't do that yet, i'm still learning")) + +(define-transient-command sfdx/transient-action () + "SFDX CLI Actions" + ["Project Specific" + ("P" "Create New Project" sfdx/create-project)] + ["Component Level" + ("c" "create new" sfdx/create-component) + ("d" "deploy" sfdx/deploy-component-or-project) + ("r" "retrieve" sfdx/retrieve-component)]) + (provide 'sfdx) ;;; sfdx.el ends here