diff options
| -rw-r--r-- | rt-liberation.el | 65 | 
1 files changed, 65 insertions, 0 deletions
diff --git a/rt-liberation.el b/rt-liberation.el index 7ebe5bf..2ecd32e 100644 --- a/rt-liberation.el +++ b/rt-liberation.el @@ -130,6 +130,9 @@ function returns a truth value.")  (defvar rt-liber-browser-time-format-string "%b %d %Y %H:%M"    "String passed to `format-time-string' in the ticket browser.") +(defvar rt-liber-browser-priority-cutoff 0 +  "Tickets with a priority higher than this are high priority.") +  (defface rt-liber-ticket-face    '((((class color) (background dark))       (:foreground "DarkSeaGreen")) @@ -140,6 +143,16 @@ function returns a truth value.")      (t (:background "Blue")))    "Face for tickets in browser buffer.") +(defface rt-liber-priority-ticket-face +  '((((class color) (background dark)) +     (:foreground "Orange")) +    (((class color) (background light)) +     (:foreground "Orange")) +    (((type tty) (class mono)) +     (:inverse-video t)) +    (t (:background "Black"))) +  "Face for high priority tickets in browser buffer.") +  (defconst rt-liber-viewer-font-lock-keywords    (let ((header-regexp (regexp-opt '("id: " "Ticket: " "TimeTaken: "  				     "Type: " "Field: " "OldValue: " @@ -520,6 +533,15 @@ AFTER  date after predicate."        (substring (cdr (assoc "id" ticket-alist)) 7)      nil)) +(defun rt-liber-ticket-priority-only (ticket-alist) +  "Return an integer value priority or NIL." +  (if ticket-alist +      (let ((p-str (cdr (assoc "Priority" ticket-alist)))) +	(if p-str +	    (string-to-number p-str) +	  nil)) +    nil)) +  (defun rt-liber-viewer-visit-in-browser ()    "Visit this ticket in the RT Web interface."    (interactive) @@ -755,6 +777,16 @@ ASSOC-BROWSER if non-nil should be a ticket browser."      (cond ((eq char ?%) "%") ;; escape sequence for %  	  (t (or v ""))))) +(defun rt-liber-high-priority-p (ticket-alist) +  "Return t if TICKET-ALIST is high priority. + +The ticket's priority is compared to the variable +  `rt-liber-browser-priority-cutoff'." +  (let ((p (rt-liber-ticket-priority-only ticket-alist))) +    (if p +	(< rt-liber-browser-priority-cutoff p) +      nil))) +  (defun rt-liber-format (format ticket-alist)    "Substitute %-sequences in FORMAT."    (let ((alist (rt-liber-format-function ticket-alist))) @@ -770,6 +802,14 @@ ASSOC-BROWSER if non-nil should be a ticket browser."    (add-text-properties (point-at-bol)  		       (point-at-eol)  		       '(face rt-liber-ticket-face)) +  (when (rt-liber-high-priority-p ticket) +    (let ((p (point))) +      (insert (format " HIGH PRIORITY (%d)" +		      (rt-liber-ticket-priority-only ticket))) +      (add-text-properties p +			   (point-at-eol) +			   '(face rt-liber-priority-ticket-face)))) +    (newline)    (insert (rt-liber-format "  [%o] %R: %s" ticket))    (let ((p (point))) @@ -1239,6 +1279,23 @@ If FIELD already exists, update to VALUE."       (rt-liber-command-runner command args)       'rt-liber-command-runner-parser-f))) +(defun rt-liber-command-set-priority (id priority) +  "Set ticket ID priority to be PRIORITY." +  (let ((command (rt-liber-command-get-command-string 'edit)) +	(args +	 (format "ticket/%s set priority=%s" +		 id +		 (if (= priority 0) +		     ;; this is to work around a weird bug in RT +		     ;; (3.8.8) in which the CLI command to set the +		     ;; priority to 0 doesn't work, but sending 00 +		     ;; does +		     "00" +		   (format "%d" priority))))) +    (rt-liber-parse-answer +     (rt-liber-command-runner command args) +     'rt-liber-command-runner-parser-f))) +  (defun rt-liber-command-set-status-deleted (id)    "Set the status of ticket ID to `deleted'."    (rt-liber-command-set-status @@ -1286,6 +1343,14 @@ If FIELD already exists, update to VALUE."       (rt-liber-command-runner command args)       'rt-liber-command-runner-parser-f))) +(defun rt-liber-browser-prioritize (n) +  "Assigng current ticket priority N." +  (interactive "nPriority (number): ") +  (rt-liber-command-set-priority +   (rt-liber-browser-ticket-id-at-point) +   n) +  (rt-liber-browser-refresh-and-return)) +  (defun rt-liber-browser-assign (name)    "Assign current ticket to a user NAME."    (interactive "sAssign to: ")  | 
