diff options
| author | Alex Kost <alezost@gmail.com> | 2018-07-16 21:32:54 +0300 |
|---|---|---|
| committer | Alex Kost <alezost@gmail.com> | 2018-07-27 12:14:24 +0300 |
| commit | 8ef3d8339f28aed87601544cf3bce5b66bd38ab2 (patch) | |
| tree | 1e6743512576054667d0804c5374da413c0f1ad1 /build-farm-build.el | |
| parent | project: Add "B" key to the List buffer (diff) | |
| download | emacs-build-farm-8ef3d8339f28aed87601544cf3bce5b66bd38ab2.tar.gz | |
Add "Builds" button everywhere
I.e., to "Build Info", "Jobset Info", "Project Info" buffers.
* build-farm-build.el (build-farm-build-define-button): Remove macro.
(build-farm-build-info-insert-builds-button)
(build-farm-build-info-insert-button)
(build-farm-build-info-insert-project)
(build-farm-build-info-insert-jobset)
(build-farm-build-info-insert-job)
(build-farm-build-info-insert-system): New procedures.
* build-farm-jobset.el (build-farm-jobset-info-insert-project): Use
'build-farm-build-info-insert-builds-button'.
* build-farm-project.el (build-farm-project-info-insert-jobset): Likewise.
Diffstat (limited to 'build-farm-build.el')
| -rw-r--r-- | build-farm-build.el | 96 |
1 files changed, 66 insertions, 30 deletions
diff --git a/build-farm-build.el b/build-farm-build.el index 18bb9da..9c2ee6e 100644 --- a/build-farm-build.el +++ b/build-farm-build.el @@ -231,54 +231,90 @@ See `build-farm-build-status-alist'." build-farm-build-info-insert-url (time format (time)) (status format build-farm-build-info-insert-status) - (project format (format build-farm-build-project)) - (jobset format (format build-farm-build-jobset)) - (job format (format build-farm-build-job)) - (system format (format build-farm-build-system)) + (project format build-farm-build-info-insert-project) + (jobset format build-farm-build-info-insert-jobset) + (job format build-farm-build-info-insert-job) + (system format build-farm-build-info-insert-system) (priority format (format)))) (defface build-farm-build-info-project - '((t :inherit link)) + '((t)) "Face for project names." :group 'build-farm-build-info-faces) (defface build-farm-build-info-jobset - '((t :inherit link)) + '((t)) "Face for jobsets." :group 'build-farm-build-info-faces) (defface build-farm-build-info-job - '((t :inherit link)) + '((t)) "Face for jobs." :group 'build-farm-build-info-faces) (defface build-farm-build-info-system - '((t :inherit link)) + '((t)) "Face for system names." :group 'build-farm-build-info-faces) -(defmacro build-farm-build-define-button (name) - "Define `build-farm-build-NAME' button." - (let* ((name-str (symbol-name name)) - (button-name (intern (concat "build-farm-build-" name-str))) - (face-name (intern (concat "build-farm-build-info-" name-str))) - (keyword (intern (concat ":" name-str)))) - `(define-button-type ',button-name - :supertype 'bui - 'face ',face-name - 'help-echo ,(format "\ -Show latest builds for this %s (with prefix, prompt for all parameters)" - name-str) - 'action (lambda (btn) - (let ((args (build-farm-build-latest-prompt-args - ,keyword (button-label btn)))) - (apply #'build-farm-build-get-display - 'latest args)))))) +(cl-defun build-farm-build-info-insert-builds-button + (&key project jobset job system) + "Insert 'Builds' button for PROJECT, JOBSET, JOB, SYSTEM." + (bui-insert-action-button + "Builds" + (lambda (btn) + (let ((args (build-farm-build-latest-prompt-args + :project (button-get btn 'project) + :jobset (button-get btn 'jobset) + :job (button-get btn 'job) + :system (button-get btn 'system)))) + (apply #'build-farm-build-get-display + 'latest args))) + (concat "Show latest builds" + (let ((thing (cond (job "job") + (system "system") + (jobset "jobset") + (project "project")))) + (if thing + (concat " for this " thing) + "")) + " (with prefix, prompt for all parameters)") + 'project project + 'jobset jobset + 'job job + 'system system)) + +(defun build-farm-build-info-insert-button (entry) + "Insert 'Builds' button for build ENTRY at point." + (build-farm-build-info-insert-builds-button + :project (bui-entry-non-void-value entry 'project) + :jobset (bui-entry-non-void-value entry 'jobset) + :job (bui-entry-non-void-value entry 'job) + :system (bui-entry-non-void-value entry 'system))) + +(defun build-farm-build-info-insert-project (project entry) + "Insert PROJECT for build ENTRY at point." + (bui-format-insert project 'build-farm-build-info-project) + (bui-insert-indent) + (build-farm-build-info-insert-button entry)) + +(defun build-farm-build-info-insert-jobset (jobset entry) + "Insert JOBSET for build ENTRY at point." + (bui-format-insert jobset 'build-farm-build-info-jobset) + (bui-insert-indent) + (build-farm-build-info-insert-button entry)) + +(defun build-farm-build-info-insert-job (job entry) + "Insert JOB for build ENTRY at point." + (bui-format-insert job 'build-farm-build-info-job) + (bui-insert-indent) + (build-farm-build-info-insert-button entry)) -(build-farm-build-define-button project) -(build-farm-build-define-button jobset) -(build-farm-build-define-button job) -(build-farm-build-define-button system) +(defun build-farm-build-info-insert-system (system entry) + "Insert SYSTEM for build ENTRY at point." + (bui-format-insert system 'build-farm-build-info-system) + (bui-insert-indent) + (build-farm-build-info-insert-button entry)) (defun build-farm-build-info-insert-url (entry) "Insert URL for the build ENTRY." @@ -341,7 +377,7 @@ ARGS." (let ((entry (bui-list-current-entry))) (build-farm-build-latest-prompt-args :project (bui-entry-non-void-value entry 'project) - :jobset (bui-entry-non-void-value entry 'name) + :jobset (bui-entry-non-void-value entry 'jobset) :job (bui-entry-non-void-value entry 'job) :system (bui-entry-non-void-value entry 'system)))) (apply #'build-farm-latest-builds number args)) |
