|
|
@@ -2778,109 +2778,6 @@ and search from projectile root (if projectile is available)." |
|
|
|
(pb/push-item '("") text "note" (or title ""))) |
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;; |
|
|
|
;; git-bug |
|
|
|
|
|
|
|
(defconst git-bug-ls-regexp |
|
|
|
(eval-when-compile |
|
|
|
(rx bol |
|
|
|
(submatch (one-or-more alphanumeric)) ; id |
|
|
|
;; (one-or-more any) |
|
|
|
(one-or-more space) |
|
|
|
(submatch (or "open" "close")) ; status |
|
|
|
(one-or-more space) |
|
|
|
(submatch (maximal-match (zero-or-more print))) ; title |
|
|
|
"\t" |
|
|
|
(submatch (one-or-more alphanumeric)) ; user |
|
|
|
(one-or-more space) |
|
|
|
"C:" |
|
|
|
(submatch (one-or-more digit)) ; Comment num |
|
|
|
(one-or-more space) |
|
|
|
"L:" |
|
|
|
(submatch (one-or-more digit)) ; Label num |
|
|
|
eol |
|
|
|
)) |
|
|
|
"Regexp to parse line of output of git-bug ls. |
|
|
|
Used by `git-bug-ls'.") |
|
|
|
|
|
|
|
(declare-function string-trim "subr-x") |
|
|
|
(defun git-bug-bugs () |
|
|
|
"Get list of git-bug bugs." |
|
|
|
(with-temp-buffer |
|
|
|
(git-bug--call-process "bug" "ls") |
|
|
|
(goto-char (point-min)) |
|
|
|
(let ((bugs nil)) |
|
|
|
(while (not (eq (point) (point-max))) |
|
|
|
(save-match-data |
|
|
|
(when (re-search-forward git-bug-ls-regexp (point-at-eol) t) |
|
|
|
(setq bugs `(,@bugs |
|
|
|
,(list |
|
|
|
:id (match-string 1) |
|
|
|
:status (match-string 2) |
|
|
|
:title (string-trim (match-string 3)) |
|
|
|
:user (match-string 4) |
|
|
|
:comment-num (match-string 5) |
|
|
|
:label-num (match-string 6) |
|
|
|
))))) |
|
|
|
(forward-line 1) |
|
|
|
(goto-char (point-at-bol))) |
|
|
|
bugs))) |
|
|
|
|
|
|
|
(defun git-bug-ls () |
|
|
|
"Open and select git bug list buffer." |
|
|
|
(interactive) |
|
|
|
(pop-to-buffer (git-bug-ls-noselect))) |
|
|
|
|
|
|
|
(defun git-bug-ls--set-tabulated-list-mode-variables () |
|
|
|
"Not implemented.") |
|
|
|
|
|
|
|
(defun git-bug-ls-mode () |
|
|
|
"Not implemented.") |
|
|
|
|
|
|
|
(defun git-bug-ls-noselect (&optional directory) |
|
|
|
"Open git bug list buffer. |
|
|
|
|
|
|
|
If optional arg DIRECTORY is given change current directory to there before |
|
|
|
initializing." |
|
|
|
(setq directory (expand-file-name (or directory |
|
|
|
default-directory))) |
|
|
|
(cl-assert (file-directory-p directory)) |
|
|
|
(let* ((root (git-bug--get-repository-root directory)) |
|
|
|
(name (file-name-nondirectory root)) |
|
|
|
(bname (format "*GitBug<%s>*" name))) |
|
|
|
(with-current-buffer (get-buffer-create bname) |
|
|
|
(cd root) |
|
|
|
(git-bug-ls--set-tabulated-list-mode-variables) |
|
|
|
(git-bug-ls-mode) |
|
|
|
(current-buffer)))) |
|
|
|
|
|
|
|
(defun git-bug--get-repository-root (dir) |
|
|
|
"Resolve repository root of DIR. |
|
|
|
|
|
|
|
If DIR is not inside of any git repository, signal an error." |
|
|
|
(cl-assert (file-directory-p dir)) |
|
|
|
(with-temp-buffer |
|
|
|
(cd dir) |
|
|
|
(git-bug--call-process "rev-parse" "--show-toplevel") |
|
|
|
(goto-char (point-min)) |
|
|
|
(buffer-substring-no-properties (point-at-bol) (point-at-eol)))) |
|
|
|
|
|
|
|
(defun git-bug--call-process (&rest args) |
|
|
|
"Start git process synchronously with ARGS. |
|
|
|
|
|
|
|
Raise error when git process ends with non-zero status. |
|
|
|
Any output will be written to current buffer." |
|
|
|
(let ((status (apply 'call-process |
|
|
|
"git" |
|
|
|
nil |
|
|
|
t |
|
|
|
nil |
|
|
|
args))) |
|
|
|
(cl-assert (eq status 0) |
|
|
|
nil |
|
|
|
(buffer-substring-no-properties (point-min) (point-max))))) |
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;; |
|
|
|
;; peek-file-mode |
|
|
|
|
|
|
@@ -3067,72 +2964,6 @@ Any output will be written to current buffer." |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
;;;;;;;;;;;;;; |
|
|
|
;; mmv |
|
|
|
;; https://www.emacswiki.org/emacs/MakingMarkVisible |
|
|
|
|
|
|
|
;;;; Make the mark visible, and the visibility toggleable. ('mmv' means 'make |
|
|
|
;;;; mark visible'.) By Patrick Gundlach, Teemu Leisti, and Stefan. |
|
|
|
|
|
|
|
(defgroup mmv nil |
|
|
|
"Make mark visible." |
|
|
|
:group 'tools) |
|
|
|
|
|
|
|
(defvar mmv-face-foreground |
|
|
|
(face-foreground 'hi-yellow) |
|
|
|
"Foreground color for `mmv-face'.") |
|
|
|
|
|
|
|
(defvar mmv-face-background |
|
|
|
(face-background 'hi-yellow) |
|
|
|
"Background color for `mmv-face'.") |
|
|
|
|
|
|
|
(defface mmv-face |
|
|
|
`((t :background ,mmv-face-background :foreground ,mmv-face-foreground)) |
|
|
|
"Face used for showing the mark's position." |
|
|
|
:group 'mmv) |
|
|
|
|
|
|
|
(defvar-local mmv-mark-overlay nil |
|
|
|
"The overlay for showing the mark's position.") |
|
|
|
|
|
|
|
(defvar-local mmv-is-mark-visible t |
|
|
|
"The overlay is visible only when this variable's value is t.") |
|
|
|
|
|
|
|
(defun mmv-draw-mark (&rest _) |
|
|
|
"Make the mark's position stand out by means of a one-character-long overlay. |
|
|
|
If the value of variable `mmv-is-mark-visible' is nil, the mark will be |
|
|
|
invisible." |
|
|
|
(unless mmv-mark-overlay |
|
|
|
(setq mmv-mark-overlay (make-overlay 0 0 nil t)) |
|
|
|
(overlay-put mmv-mark-overlay 'face 'mmv-face) |
|
|
|
(overlay-put mmv-mark-overlay 'priority 10)) ;; bigger than highlight-indentation-current-column-overlay-priority |
|
|
|
(let ((mark-position (mark t))) |
|
|
|
(cond |
|
|
|
((null mark-position) (delete-overlay mmv-mark-overlay)) |
|
|
|
((and (< mark-position (point-max)) |
|
|
|
(not (eq ?\n (char-after mark-position)))) |
|
|
|
(overlay-put mmv-mark-overlay 'after-string nil) |
|
|
|
(move-overlay mmv-mark-overlay mark-position (1+ mark-position))) |
|
|
|
(t |
|
|
|
;; This branch is called when the mark is at the end of a line or at the |
|
|
|
;; end of the buffer. We use a bit of trickery to avoid the higlight |
|
|
|
;; extending from the mark all the way to the right end of the frame. |
|
|
|
(overlay-put mmv-mark-overlay 'after-string |
|
|
|
(propertize " " 'face (overlay-get mmv-mark-overlay 'face))) |
|
|
|
(move-overlay mmv-mark-overlay mark-position mark-position))))) |
|
|
|
|
|
|
|
;; ;; Makes display very slow? |
|
|
|
;; (add-hook 'pre-redisplay-functions #'mmv-draw-mark) |
|
|
|
|
|
|
|
(defun mmv-toggle-mark-visibility () |
|
|
|
"Toggles the mark's visiblity and redraws it (whether invisible or visible)." |
|
|
|
(interactive) |
|
|
|
(setq mmv-is-mark-visible (not mmv-is-mark-visible)) |
|
|
|
(if mmv-is-mark-visible |
|
|
|
(set-face-attribute 'mmv-face nil :background mmv-face-background :foreground mmv-face-foreground) |
|
|
|
(set-face-attribute 'mmv-face nil :background 'unspecified :foreground 'unspecified)) |
|
|
|
(mmv-draw-mark)) |
|
|
|
|
|
|
|
|
|
|
|
(defun browse-url-macosx-vivaldi-browser (url &rest args) |
|
|
|
"Invoke the macOS Vlvaldi Web browser with URL. |
|
|
|
ARGS are not used." |
|
|
|