summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorjao <jao@gnu.org>2022-08-28 20:55:21 +0100
committerjao <jao@gnu.org>2022-08-28 20:56:36 +0100
commit686ff8fa2fb5b6cd655834f3af5cd234feef8918 (patch)
tree33c67bd7c2bf4f08808818e6004b9a1952dfbeae /lib
parented3922aed913f8f42da3965fd130b3a23f7a49f0 (diff)
downloadelibs-686ff8fa2fb5b6cd655834f3af5cd234feef8918.tar.gz
elibs-686ff8fa2fb5b6cd655834f3af5cd234feef8918.tar.bz2
afio: option to use frames (for terminals) and cleanups galore
Diffstat (limited to 'lib')
-rw-r--r--lib/eos/jao-afio.el154
-rw-r--r--lib/themes/jao-light-term-theme.el3
2 files changed, 59 insertions, 98 deletions
diff --git a/lib/eos/jao-afio.el b/lib/eos/jao-afio.el
index 98a8760..092a902 100644
--- a/lib/eos/jao-afio.el
+++ b/lib/eos/jao-afio.el
@@ -18,60 +18,38 @@
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-;;; Code:
-
+;;; initialisation
(require 'cl-lib)
(require 'jao-doc-session)
+(defvar jao-afio-use-frames (not window-system))
+
(defvar jao-open-doc-fun 'find-file)
(defvar jao-afio-mail-function 'gnus)
(defvar jao-afio-use-w3m nil)
-(defvar jao-afio-notmuch-in-web nil)
(defvar jao-afio-switch-hook nil)
(defvar jao-afio--configs '(?c ?w ?g ?p ?s))
-(defvar jao-afio--current-config (car jao-afio--configs))
-(defvar jao-afio--locker nil)
-(defvar jao-afio-fallback-fun nil)
+
+(defun jao-afio--current-config (&optional c f)
+ (when c (modify-frame-parameters f `((afio . ,c))))
+ (frame-parameter f 'afio))
(defun jao-afio--check-frame-p ()
(assoc 'afio (frame-parameters)))
(defun jao-afio--init (&optional f)
(interactive)
- (when (and (frame-live-p jao-afio--locker)
- (not (eql f jao-afio--locker)))
- (if jao-afio-fallback-fun
- (funcall jao-afio-fallback-fun)
- (error "Another frame is using afio")))
- (setq jao-afio--locker f)
- (modify-frame-parameters f '((afio . t)))
- (setq jao-afio--current-config ?c)
- (mapc (lambda (r) (set-register r nil)) jao-afio--configs)
- (window-configuration-to-register ?c))
-
-(defun jao-afio--steal ()
- (interactive)
- (setq jao-afio--locker nil)
- (jao-afio--init (window-frame (get-buffer-window (current-buffer)))))
+ (jao-afio--current-config ?c)
+ (if jao-afio-use-frames
+ (set-frame-name "W1")
+ (window-configuration-to-register ?c)))
(defun jao-afio--check-frame ()
- (unless (jao-afio--check-frame-p)
- (or ;; (when jao-afio-fallback-fun
- ;; (funcall jao-afio-fallback-fun)
- ;; t)
- (when (y-or-n-p "Another frame is using afio. Steal? ")
- (jao-afio--steal)
- t)
- (error "Aborted"))))
-
-(defun jao-afio--next-frame ()
- (interactive)
- (jao-afio--check-frame)
- (let* ((cur (member jao-afio--current-config jao-afio--configs))
- (next (or (cadr cur) (car jao-afio--configs))))
- (jao-afio--goto-frame next)))
+ (unless (jao-afio--current-config)
+ (jao-afio--init (window-frame (get-buffer-window (current-buffer))))))
+;;; session openers
;;;###autoload
(defun jao-afio-open-pdf-session ()
(interactive)
@@ -111,9 +89,7 @@
(jao-eww-session-load)
(let ((b (current-buffer)))
(other-window 1)
- (if jao-afio-notmuch-in-web
- (notmuch)
- (switch-to-buffer (car (jao-eww-session--list-buffers b))))
+ (switch-to-buffer (car (jao-eww-session--list-buffers b)))
(other-window 1)))))
;;;###autoload
@@ -163,84 +139,68 @@
((eq 'notmuch jao-afio-mail-function) (jao-afio-open-notmuch))
(jao-afio-open-mail-function (jao-afio-open-mail-function))))
+;;;###autoload
+(defun jao-afio-reset ()
+ (interactive)
+ (delete-other-windows)
+ (cl-case (jao-afio--current-config)
+ (?w (jao-afio-open-www))
+ (?g (jao-afio-open-mail))
+ (?p (jao-afio-open-doc))
+ (?s (delete-other-windows))))
+
+;;; go to frame
+(defsubst jao-afio--find-frame (c)
+ (seq-find (lambda (f) (eq (jao-afio--current-config nil f) c)) (frame-list)))
+
+(defun jao-afio-frame-name (&optional c)
+ (alist-get (or c (jao-afio--current-config))
+ '((?c . "Main") (?s . "Scratch") (?g . "Mail")
+ (?p . "Docs") (?w . "Web"))))
+
+(defun jao-afio-frame-no (&optional c)
+ (alist-get (or c (jao-afio--current-config))
+ '((?s . 0) (?c . 1) (?g . 2) (?w . 3) (?p . 4))))
+
(defun jao-afio--goto-frame (next &optional reset)
- (when (or reset (not (eq next jao-afio--current-config)))
- (let ((next-cfg (when (not reset) (get-register next))))
- (window-configuration-to-register jao-afio--current-config)
- (setq jao-afio--current-config next)
- (if next-cfg
- (jump-to-register next)
- (delete-other-windows)
- (cl-case next
- (?w (jao-afio-open-www))
- (?g (jao-afio-open-mail))
- (?p (jao-afio-open-doc))
- (?s (delete-other-windows))))
- (run-hooks 'jao-afio-switch-hook))))
+ (jao-afio--check-frame)
+ (when (or reset (not (eq next (jao-afio--current-config))))
+ (if jao-afio-use-frames
+ (let ((f (jao-afio--find-frame next)))
+ (select-frame-set-input-focus (or f (make-frame)))
+ (when (setq reset (or reset (not f)))
+ (set-frame-name (format "W%s" (or (jao-afio-frame-no next) next)))))
+ (window-configuration-to-register (jao-afio--current-config))
+ (when (and (not reset) (get-register next)) (jump-to-register next)))
+ (jao-afio--current-config next)
+ (when reset (jao-afio-reset))
+ (run-hooks 'jao-afio-switch-hook)))
(defun jao-afio--goto-main (&optional reset)
(interactive "P")
- (jao-afio--check-frame)
(jao-afio--goto-frame ?c reset))
(defun jao-afio--goto-scratch (&optional reset)
(interactive "P")
- (jao-afio--check-frame)
(jao-afio--goto-frame ?s reset))
(defun jao-afio--goto-mail (&optional reset)
(interactive "P")
- (jao-afio--check-frame)
(jao-afio--goto-frame ?g reset))
(defun jao-afio--goto-docs (&optional reset)
(interactive "P")
- (jao-afio--check-frame)
(jao-afio--goto-frame ?p reset))
(defun jao-afio--goto-www (&optional reset)
(interactive "P")
- (if (jao-afio--check-frame-p)
- (jao-afio--goto-frame ?w reset)
- (when (and jao-afio-use-w3m (w3m-alive-p))
- (pop-to-buffer (w3m-alive-p)))))
-
-(defun jao-afio--try-init (&optional f)
- (ignore-errors (jao-afio--init f))
- t)
-
-(defun jao-afio--goto-www-buffer (buf &rest _)
- (jao-afio--goto-www)
- (jao-first-window)
- (switch-to-buffer buf nil t))
-
-(defun jao-afio--goto-pdf-buffer (buf &rest _)
- (if (jao-afio--check-frame-p)
- (progn (jao-afio--goto-docs)
- (jao-first-window)
- (switch-to-buffer buf nil t))
- (pop-to-buffer buf)))
+ (jao-afio--goto-frame ?w reset))
(defun jao-afio-goto-scratch (&optional one-win)
+ (interactive "P")
(jao-afio--goto-scratch)
(when one-win (delete-other-windows)))
-(defun jao-afio-current-frame ()
- (cl-case jao-afio--current-config
- (?c "Main")
- (?s "Scratch")
- (?g "Mail")
- (?p "Docs")
- (?w "Web")))
-
-(defun jao-afio-current-no ()
- (cl-case jao-afio--current-config
- (?c "1")
- (?s "0")
- (?g "2")
- (?p "4")
- (?w "3")))
-
;;;###autoload
(defun jao-afio-goto-nth (n)
(cl-case n
@@ -248,18 +208,18 @@
((2) (jao-afio--goto-mail))
((3) (jao-afio--goto-www))
((4) (jao-afio--goto-docs))
- ((5) (jao-afio--goto-scratch-1))
+ ((5) (jao-afio--goto-scratch t))
((0) (jao-afio--goto-scratch))))
+;;; setup
;;;###autoload
-(defun jao-afio-setup (&optional fallback-fun init-p)
+(defun jao-afio-setup (&optional use-frames)
(global-set-key "\C-cf" 'jao-afio--goto-main)
(global-set-key "\C-cg" 'jao-afio--goto-mail)
(global-set-key "\C-cw" 'jao-afio--goto-www)
(global-set-key "\C-cz" 'jao-afio--goto-docs)
- (setq jao-afio-fallback-fun fallback-fun)
- (add-hook (if init-p 'after-init-hook 'after-make-frame-functions)
- 'jao-afio--try-init))
+ (setq jao-afio-use-frames use-frames)
+ (jao-afio--init))
(provide 'jao-afio)
;;; jao-afio.el ends here
diff --git a/lib/themes/jao-light-term-theme.el b/lib/themes/jao-light-term-theme.el
index 61a81a7..f7b2eb8 100644
--- a/lib/themes/jao-light-term-theme.el
+++ b/lib/themes/jao-light-term-theme.el
@@ -112,7 +112,8 @@
(vertical-border (c "grey70" nil))
(vertico-current (c nil yellow) nul ext)
(widget-button (c blue nil) nit nul)
- (widget-field (c nil bg-light) nit nul)))
+ (widget-field (c nil bg-light) nit nul)
+ (whitespace-tag (p hilite))))
;; (enable-theme 'jao-light-term)
;; (jao-mode-line-adjust-faces)