diff --git a/.emacs.d/lisp/package-cl-inspect-mode.el b/.emacs.d/lisp/package-cl-inspect-mode.el index 21019be5..7fedeaa5 100644 --- a/.emacs.d/lisp/package-cl-inspect-mode.el +++ b/.emacs.d/lisp/package-cl-inspect-mode.el @@ -1,12 +1,26 @@ +;;; package-cl-inspect-mode.el --- -*- lexical-binding: t -*- + ;; TODO: Name? cl-inspect? clinspect? clidget? eclidget? ;; Actually, make it independent of CL. ;; TODO: Better table abstraction? ;; Maybe https://github.com/kiwanami/emacs-ctable? +;; TODO: Add filters. +;; Can we add filters that ask for a column and a range depending on the type of data? + (require 'cl-lib) (defvar clinspect-column-max-width 40) +(defun clinspect--tabulated-list-sorter (entry index) + "Return a sorter that smarter than `tabulated-list' default. +If ENTRY element at INDEX is a number, sort by number, otherwise sort by string." + (if (numberp (nth index entry)) + (lambda (a b) + (< (string-to-number (aref (cadr a) index)) + (string-to-number (aref (cadr b) index)))) + t)) + (defun clinspect--tabulated-list-format (header entries) (apply #'vector (mapcar (lambda (index) (let ((column (nth index header))) @@ -18,29 +32,19 @@ (length (prin1-to-string (nth index entry)))) entries)))) - t - ;; (if (numberp (nth index (car data))) - ;; (lambda (a b) - ;; (< (nth index a) - ;; (nth index b))) - ;; t) - ))) + (clinspect--tabulated-list-sorter (car entries) index)))) (number-sequence 0 (1- (length header)))))) (define-derived-mode clinspect-mode tabulated-list-mode "Clinspect" "Mode to inspect Common Lisp sequences." - ;; (setq tabulated-list-padding 2) - ;; (setq tabulated-list-sort-key (cons "Size" 'flip)) - ;; (setq tabulated-list-printer #'disk-usage--print-entry) (add-hook 'tabulated-list-revert-hook 'tabulated-list-init-header nil t)) (defvar clinspect-buffer-name "clinspector") -;; Input: -;; - header: list of strings -;; - ddata: list of list of things. (defun clinspect (header data &optional name) - "Inspect DATA." + "Inspect DATA. +DATA is a list of things. +HEADER is a list of strings, the column names." (switch-to-buffer (generate-new-buffer (format "*%s%s*" clinspect-buffer-name (if name