My attempt to optimize my emacs load time <1 second
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

127 lines
4.4 KiB

;;; vlocitemacs.el --- Vlocity Build Tool :: Emacs integration
;;; Commentary:
;;
;; Essentially the following commands are abstracted into elisp and made dynamic:
;;
;; vlocity packDeploy -propertyfile build.properties -job job.yaml -key VlocityUITemplate/Test-test
;; vlocity packExport -propertyfile build.properties -job job.yaml -key VlocityUITemplate/Test-test
;;
;;
;;; Code:
(require 'transient)
(use-package json
:ensure t
:straight (:host github :repo "ryancrum/json.el" :branch "master"))
(defun vlo/generate-sfdx-login-list ()
"This function is used to give a list of choices (Orgs) to the user when deploying/exporting."
;; 1. make temp file to put the output of `sfdx force:org:list --json` in
;; 2. read that into the following
;;
;; let* means the variables can ref each other
(let* ((json-object-type 'hash-table)
(json-array-type 'list)
(json-key-type 'string)
(json (json-read-file "tempfile-location.json")))
;; this is how we access the first item of the "result" json member
(car (gethash "result" json))
)
)
(defvar vlo/orgs '(("build.properties" . "job.yaml"))
"List of cons-es that relate a properties file to a job file.")
(defvar vlo/project-file-name ".vemacs"
"The name of the VlocitEmacs file.")
(defvar vlo/store-user nil "Store SFDX user for current session.")
(defun vlo/get-user ()
"Prompt for sfdx username or use stored."
(if vlo/store-user
vlo/store-user
(read-string
;; (defun vlo/get-propertyfile-name ()
;; "The name of the build.properties file."
;; (car (nth 0 vlo/orgs)))
;; (defun vlo/get-jobfile-name ()
;; "The name of the job.yaml file."
;; (cdr (nth 0 vlo/orgs)))
(defun vlo/get-deployment-key ()
"Return the \"key\" used by vlocity to specify what to deploy/export."
(vlo/ensure-init-file)
(let ((path-list (delete "" (split-string (file-name-directory (buffer-file-name)) "/"))))
(format "%s/%s"
(nth (- (length path-list) 2) path-list)
(nth (- (length path-list) 1) path-list))))
(defun vlo/project-path ()
"Return path to the project file, or nil.
If project file exists in the current working directory, or a
parent directory recursively, return its path. Otherwise, return
nil."
(let ((dir (locate-dominating-file default-directory vlo/project-file-name)))
(unless dir
(error (concat "Error: cannot find " vlo/project-file-name)))
dir))
(defun vlo/ensure-init-file ()
"Asserts that you're currently inside a vlocity project."
(vlo/project-path))
(defun leo/exec-process (cmd &optional comint)
"Execute a process running CMD and optionally pass COMINT as t to put buffer in `comint-mode'."
(let ((compilation-buffer-name-function
(lambda (mode)
(format "*exec-process*"))))
(message (concat "Running " cmd))
(compile cmd comint)))
(defun vlo/packExport ()
"Run the packExport command."
(interactive)
(if (and (file-exists-p (vlo/get-propertyfile-name))
(file-exists-p (vlo/get-jobfile-name)))
(leo/exec-process
(format "cd %s; vlocity packExport -sfdx.username %s -job %s -key %s"
(vlo/ensure-init-file)
(vlo/get-user)
(vlo/get-jobfile-name)
(vlo/get-deployment-key)))
(error (format "Error: cannot find either %s or %s" (vlo/get-propertyfile-name) (vlo/get-jobfile-name)))))
(defun vlo/packDeploy ()
"Run the packDeploy command."
(interactive)
(if (and (file-exists-p (vlo/get-propertyfile-name))
(file-exists-p (vlo/get-jobfile-name)))
(leo/exec-process
(format "cd %s; vlocity packDeploy -sfdx.username %s -job %s -key %s"
(vlo/ensure-init-file)
(vlo/get-user)
(vlo/get-jobfile-name)
(vlo/get-deployment-key)))
(error (format "Error: cannot find either %s or %s" (vlo/get-propertyfile-name) (vlo/get-jobfile-name)))))
(define-transient-command vlo/transient-action ()
"Vlocity Build Tool CLI Actions"
["Actions"
("e" "export" vlo/packExport)
("d" "deploy" vlo/packDeploy)])
(provide 'vlocitemacs)
;;; vlocitemacs.el ends here