Created
November 25, 2017 16:22
-
-
Save jmercouris/8b7577978205ae34bbad9545b9104874 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;;; buffer.lisp --- lisp subroutines for creating / managing buffers | |
(in-package :next) | |
(defclass buffer () | |
((name :accessor name :initarg :name) | |
(mode :accessor mode :initarg :mode) | |
(view :accessor view :initarg :view))) | |
(defun generate-new-buffer (name mode) | |
(let ((new-buffer | |
(make-instance 'buffer | |
:name name | |
:mode mode | |
:view (mode-view mode)))) | |
(push new-buffer *buffers*) | |
new-buffer)) | |
(defun set-active-buffer (buffer) | |
(setf *active-buffer* buffer)) | |
(defun set-visible-active-buffer (buffer) | |
(set-active-buffer buffer) | |
(interface:set-visible-view (view *active-buffer*))) | |
(defun switch-buffer (input) | |
(let ((buffer (find-if #'(lambda (element) (equalp input (name element))) *buffers*))) | |
(set-visible-active-buffer buffer))) | |
(defun get-active-buffer-index () | |
(position *active-buffer* *buffers* :test #'equalp)) | |
(defun switch-buffer-previous () | |
(let ((active-buffer-index (position *active-buffer* *buffers* :test #'equalp))) | |
(if (equalp 0 active-buffer-index) | |
(set-visible-active-buffer (nth (- (length *buffers*) 1) *buffers*)) | |
(set-visible-active-buffer (nth (- active-buffer-index 1) *buffers*))))) | |
(defun switch-buffer-next () | |
(let ((active-buffer-index (position *active-buffer* *buffers* :test #'equalp))) | |
(if (< (+ active-buffer-index 1) (length *buffers*)) | |
(set-visible-active-buffer (nth (+ active-buffer-index 1) *buffers*)) | |
(set-visible-active-buffer (nth 0 *buffers*))))) | |
(defun buffer-complete (input) | |
(fuzzy-match input (mapcar #'name *buffers*))) | |
(defun delete-buffer (input) | |
(let ((buffer (find-if #'(lambda (element) (equalp input (name element))) *buffers*))) | |
(interface:delete-view (view buffer)) | |
(delete buffer *buffers*))) | |
(defun delete-active-buffer () | |
(when (> (length *buffers*) 1) | |
(let ((former-active-buffer *active-buffer*))))) | |
(defparameter *buffers* (list "a" "b" "c")) | |
(defparameter *active-buffer* (nth 0 *buffers*) | |
(defun delete-active-buffer () | |
(when (> (length *buffers*) 1) | |
(let ((former-active-buffer *active-buffer*)) | |
;; switch-buffer-next changes value of *active-buffer* | |
;; which in turn changes the value of former-active-buffer | |
(switch-buffer-next) | |
;; therefore delete actually deletes the new *active-buffer* | |
(delete former-active-buffer *buffers*) | |
(interface:delete-view (view former-active-buffer))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment