summaryrefslogtreecommitdiff
path: root/common.el
diff options
context:
space:
mode:
Diffstat (limited to 'common.el')
-rw-r--r--common.el104
1 files changed, 104 insertions, 0 deletions
diff --git a/common.el b/common.el
index 702124f..fa6f3fe 100644
--- a/common.el
+++ b/common.el
@@ -55,6 +55,110 @@
(t
(other-window 1)))))
+;;;###autoload
+(defun durand-embark-scroll-down-or-go-to-completions (&optional arg)
+ "Scroll down; if this is not feasible, go to the completions buffer.
+ARG means do this command ARG times."
+ (interactive "p")
+ (let ((original-point (point))
+ (left (abs (forward-line arg)))
+ (completion-windows
+ (delq nil
+ (mapcar
+ (lambda (w)
+ (and (consp
+ (delq nil
+ (mapcar (lambda (name)
+ (string-match-p
+ name
+ (buffer-name (window-buffer w))))
+ durand-completion-buffer-names)))
+ w))
+ (window-list nil 'nomini))))
+ (in-completion-p (consp
+ (delq nil
+ (mapcar
+ (lambda (name)
+ (string-match-p name (buffer-name)))
+ durand-completion-buffer-names)))))
+ (cond ((= (point) (point-max))
+ (setq left (1+ left)))
+ ((get-text-property (point) 'field)
+ (goto-char original-point)))
+ (cond ((and (> left 0)
+ (consp completion-windows)
+ (not in-completion-p))
+ (select-window (car completion-windows))
+ (cond
+ ((> arg 0)
+ (goto-char (point-min))
+ (cond
+ ((derived-mode-p 'completion-list-mode)
+ (next-completion 1))))
+ ((< arg 0)
+ (goto-char (point-max))
+ (cond
+ ((derived-mode-p 'completion-list-mode)
+ (next-completion -1)))))))))
+
+;;;###autoload
+(defun durand-embark-scroll-up-or-go-to-completions (&optional arg)
+ "Scroll up; if this is not feasible, go to the completions buffer.
+ARG means do this command ARG times."
+ (interactive "p")
+ (durand-embark-scroll-down-or-go-to-completions (- arg)))
+
+;;;###autoload
+(defun durand-completion-scroll-down-or-go-to-minibuffer (&optional arg)
+ "Scroll down; if this is not feasible, go to the mini-buffer.
+ARG means do this command ARG times."
+ (interactive "p")
+ (let ((original-point (point))
+ (left (abs (forward-line arg)))
+ (minibuffer-active-p (active-minibuffer-window))
+ (in-minibuffer-p (minibuffer-window-active-p (selected-window))))
+ (cond ((= (point) (point-max))
+ (setq left (1+ left)))
+ ((get-text-property (point) 'field)
+ (goto-char original-point)))
+ (cond ((and (> left 0)
+ minibuffer-active-p
+ (not in-minibuffer-p))
+ (select-window (active-minibuffer-window))
+ (cond
+ ((> arg 0)
+ (goto-char (point-min)))
+ ((< arg 0)
+ (goto-char (point-max))))))))
+
+;;;###autoload
+(defun durand-completion-scroll-up-or-go-to-minibuffer (&optional arg)
+ "Scroll up; if this is not feasible, go to the mini-buffer.
+ARG means do this command ARG times."
+ (interactive "p")
+ (durand-completion-scroll-down-or-go-to-minibuffer (- arg)))
+
+;;; Don't ask me if I want to visit the file again.
+
+(require 'register)
+
+;;;###autoload
+(cl-defmethod register-val-jump-to ((val cons) delete)
+ (cond
+ ((frame-configuration-p (car val))
+ (set-frame-configuration (car val) (not delete))
+ (goto-char (cadr val)))
+ ((window-configuration-p (car val))
+ (set-window-configuration (car val))
+ (goto-char (cadr val)))
+ ((eq (car val) 'file)
+ (find-file (cdr val)))
+ ((eq (car val) 'file-query)
+ (find-buffer-visiting (nth 1 val))
+ (find-file (nth 1 val))
+ (goto-char (nth 2 val)))
+ (t (cl-call-next-method val delete))))
+
;;; Intentionally disable some key-bindings.
;;;###autoload