Skip to content

Instantly share code, notes, and snippets.

@ha2ne2
Created May 10, 2015 15:35
Show Gist options
  • Save ha2ne2/fbff76cc511114967042 to your computer and use it in GitHub Desktop.
Save ha2ne2/fbff76cc511114967042 to your computer and use it in GitHub Desktop.
;; [2015-05-11]
;; C-M-.で進む、C-M-,で戻るが出来る便利関数
;; 移動中はミニバッファに状況を表示します
;; 感想きかせてくれると嬉しいです
(require 'cl)
(defmacro kset (key fn) `(global-set-key (kbd ,key) ,fn))
(defun substr (str start end)
(if (> end (length str))
str
(subseq str start end)))
(defun set-equal (a b)
(and (subsetp a b) (subsetp b a)))
(defun real-buffer-list ()
(remove-if-not #'(lambda (buffer)
(let ((buffer (buffer-name buffer)))
(or (and (not (equal ?* (elt buffer 0)))
(not (equal ? (elt buffer 0))))
(equal "*slime-repl" (substr buffer 0 11))
(equal "*scratch*" buffer)
(equal "*ruby*" buffer))))
(buffer-list)))
(defun print-buffers-to-minibuffer (buffers)
(labels ((normalize (buffer-name)
(if (equal buffer-name (buffer-name))
(format "[%-10s]" (substr buffer-name 0 10))
(format " %-10s " (substr buffer-name 0 10)))))
(message (mapconcat #'normalize (mapcar #'buffer-name buffers) ""))))
(defun file-transitter (next-fn)
(let ((bufs (real-buffer-list)))
(unless (set-equal *buffers* bufs)
(let ((added (set-difference bufs *buffers*))
(deleted (set-difference *buffers* bufs)))
(setq *buffers*
(append added (remove-if (lambda (x) (find x deleted)) *buffers*))))))
(switch-to-buffer (elt *buffers* (mod (funcall next-fn (or (position (current-buffer) *buffers*) 0))
(length *buffers*))))
(print-buffers-to-minibuffer *buffers*))
(defun next-file ()
(interactive)
(file-transitter #'1+))
(defun prev-file ()
(interactive)
(file-transitter #'1-))
(defvar *buffers* (real-buffer-list))
(kset "C-M-." #'next-file)
(kset "C-M-," #'prev-file)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment