A. Patch: swap prev-buffer <--> next-buffer
Steps to reproduce issue:
;; 1. load emacsy buffers without the fix.
(load "buffer.scm")

;; 2. imagine these are tabs opened in order
(map add-buffer! '(peace satan hell))

;; 3. manually verify that we have these buffers
(buffer-list) ;; (hell satan peace)

;; 4. current buffer should be 'hell
(current-buffer) ;; -> hell
(prev-buffer) ;; -> peace
(next-buffer) ;; -> satan

prev-buffer has next-buffer semantics and vice versa, due to what
mru-next! considers next.

B. Patch: add procedures buffer-next! buffer-prev!

Also, the procedures buffer-next! and buffer-previous! have been added
so that these can be used from a repl without the emacsy gui running.

C. Patch: use #:export form instead of define*-public forms
Have the API in one place at the top of the file

>From dbc53ceba04573678c211035b1a8df82d58a0f52 Mon Sep 17 00:00:00 2001
From: Amar Singh <n...@disroot.org>
Date: Sun, 23 Jun 2019 23:45:06 +0530
Subject: [PATCH 1/3] cleanup buffer.scm: export using #:export keyword

---
 emacsy/buffer.scm | 69 +++++++++++++++++++++++++++++++----------------
 1 file changed, 46 insertions(+), 23 deletions(-)

diff --git a/emacsy/buffer.scm b/emacsy/buffer.scm
index 804a929..beeddf1 100644
--- a/emacsy/buffer.scm
+++ b/emacsy/buffer.scm
@@ -28,7 +28,30 @@
   #:use-module (emacsy keymap)
   #:use-module (emacsy command)
   #:use-module (emacsy klecl)
-  #:use-module (emacsy mode))
+  #:use-module (emacsy mode)
+  #:export (next-buffer
+            prev-buffer
+            with-buffer
+            save-excursion
+            <buffer>
+            buffer-stack
+            last-buffer
+            aux-buffer
+            buffer-name
+            buffer-name
+            set-buffer-name!
+            buffer-modified?
+            buffer-modified-tick
+            current-local-map
+            use-local-map
+            buffer-list
+            current-buffer
+            add-buffer!
+            remove-buffer!
+            set-buffer!
+            switch-to-buffer
+            local-var
+            emacsy-mode-line))
 
 ;;; Commentary:
 
@@ -52,7 +75,7 @@
 ;; A convenience macro to work with a given buffer.
 ;; @end defmac
 ;;.
-(define-syntax-public with-buffer
+(define-syntax with-buffer
   (syntax-rules ()
     ((with-buffer buffer e ...)
      (let ((old-buffer (current-buffer))
@@ -66,7 +89,7 @@
 ;; A convenience macro to do some work
 ;; @end defmac
 ;;.
-(define-syntax-public save-excursion
+(define-syntax save-excursion
   (syntax-rules ()
     ((save-excursion body ...)
      (let ((old-buffer (current-buffer))
@@ -82,7 +105,7 @@
           (goto-char old-point)))))))
 
 ;;.
-(define-class-public <buffer> ()
+(define-class <buffer> ()
   (name #:init-keyword #:name)
   (file-name #:accessor buffer-file-name #:init-form #f #:init-keyword #:buffer-file-name)
   (keymap #:accessor local-keymap #:init-keyword #:keymap #:init-form (make-keymap))
@@ -104,39 +127,39 @@
 ;;; one.
 
 ;;.
-(define-public buffer-stack (make <mru-stack>))
+(define buffer-stack (make <mru-stack>))
 
 ;;.
-(define-public last-buffer #f)
+(define last-buffer #f)
 
 ;;.
-(define-public aux-buffer #f)
+(define aux-buffer #f)
 
 ;; Buffer's have a name, and there is always a current buffer or it's
 ;; false.  Note that methods do not work as easily with optional
 ;; arguments.  It seems best to define each method with a different
 ;; number of arguments as shown below.
-(define-method-public (buffer-name)
+(define-method (buffer-name)
   (buffer-name (current-buffer)))
 
 ;;.
-(define-method-public (buffer-name (buffer <buffer>))
+(define-method (buffer-name (buffer <buffer>))
   (slot-ref buffer 'name))
 
 ;;.
-(define-method-public (set-buffer-name! name)
+(define-method (set-buffer-name! name)
   (set-buffer-name! name (current-buffer)))
 
 ;;.
-(define-method-public (set-buffer-name! name (buffer <buffer>))
+(define-method (set-buffer-name! name (buffer <buffer>))
   (slot-set! buffer 'name name))
 
 ;;.
-(define-method-public (buffer-modified?)
+(define-method (buffer-modified?)
   (buffer-modified? (current-buffer)))
 
 ;;.
-(define-method-public (buffer-modified-tick)
+(define-method (buffer-modified-tick)
   (buffer-modified-tick (current-buffer)))
 
 ;;.
@@ -147,30 +170,30 @@
 ;; @subsection Emacs Compatibility
 
 ;;.
-(define-public (current-local-map)
+(define (current-local-map)
   (local-keymap (current-buffer)))
 
 ;;.
-(define-public (use-local-map keymap)
+(define (use-local-map keymap)
   (set! (local-keymap (current-buffer)) keymap))
 
 ;;.
-(define-public (buffer-list)
+(define (buffer-list)
   (mru-list buffer-stack))
 
 ;;.
-(define-public (current-buffer)
+(define (current-buffer)
   ;; Perhaps instead of returning #f for no buffer there should be an
   ;; immutable void-buffer class.
   (or aux-buffer
       (mru-ref buffer-stack)))
 
 ;;.
-(define-public (add-buffer! buffer)
+(define (add-buffer! buffer)
   (mru-add! buffer-stack buffer))
 
 ;;.
-(define-public (remove-buffer! buffer)
+(define (remove-buffer! buffer)
   (mru-remove! buffer-stack buffer))
 
 ;;.
@@ -183,7 +206,7 @@
   (next-buffer (- incr)))
 
 ;;.
-(define-public (set-buffer! buffer)
+(define (set-buffer! buffer)
   ;;(emacsy-log-debug "set-buffer! to ~a" buffer)
   (if (mru-set! buffer-stack buffer)
       (set! aux-buffer #f)
@@ -217,7 +240,7 @@
   (current-buffer))
 
 ;;.
-(define-public switch-to-buffer primitive-switch-to-buffer)
+(define switch-to-buffer primitive-switch-to-buffer)
 
 ;;.
 (define (local-var-ref symbol)
@@ -237,12 +260,12 @@
              (assq-set! (local-variables (current-buffer)) symbol value)))
 
 ;;.
-(define-public local-var
+(define local-var
                (make-procedure-with-setter local-var-ref local-var-set!))
 
 ;;.
 ;; method
-(define-method-public (emacsy-mode-line)
+(define-method (emacsy-mode-line)
   (emacsy-mode-line (current-buffer)))
 
 (define-method (emacsy-mode-line (buffer <buffer>))
-- 
2.22.0

>From f2585ae5c4420cede9fa602712dad31c33f06278 Mon Sep 17 00:00:00 2001
From: Amar Singh <n...@disroot.org>
Date: Sun, 23 Jun 2019 23:50:39 +0530
Subject: [PATCH 2/3] buffers.scm: add procedures buffer-previous! buffer-next!

---
 emacsy/buffer.scm | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/emacsy/buffer.scm b/emacsy/buffer.scm
index beeddf1..34c3a75 100644
--- a/emacsy/buffer.scm
+++ b/emacsy/buffer.scm
@@ -31,6 +31,8 @@
   #:use-module (emacsy mode)
   #:export (next-buffer
             prev-buffer
+            buffer-previous!
+            buffer-next!
             with-buffer
             save-excursion
             <buffer>
@@ -196,6 +198,12 @@
 (define (remove-buffer! buffer)
   (mru-remove! buffer-stack buffer))
 
+(define* (buffer-previous! #:optional (incr 1))
+  (mru-next! buffer-stack incr))
+
+(define* (buffer-next! #:optional (incr 1))
+  (buffer-previous! (- incr)))
+
 ;;.
 (define-interactive (next-buffer #:optional (incr 1))
   (mru-next! buffer-stack incr)
-- 
2.22.0

>From 2f539bc90612aac149024b1a1ed81b26573097b6 Mon Sep 17 00:00:00 2001
From: Amar Singh <n...@disroot.org>
Date: Sun, 23 Jun 2019 23:52:54 +0530
Subject: [PATCH 3/3] swap next-buffer <---> prev-buffer semantics

---
 emacsy/buffer.scm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/emacsy/buffer.scm b/emacsy/buffer.scm
index 34c3a75..b85cec4 100644
--- a/emacsy/buffer.scm
+++ b/emacsy/buffer.scm
@@ -206,7 +206,7 @@
 
 ;;.
 (define-interactive (next-buffer #:optional (incr 1))
-  (mru-next! buffer-stack incr)
+  (buffer-next!)
   (switch-to-buffer (mru-ref buffer-stack)))
 
 ;;.
-- 
2.22.0

Reply via email to