(setq *photo-dir* (directory-file-name "/Users/jwd/bench/photos/")) (setq *operating-photo-dir* (concat *photo-dir* "-photogal")) (setq *my-tags* nil) (setq *photogal-operating-table* (mapcar (lambda (photo) (cons (list 'photo) photo)) (all-photos))) (defun photogal-add-tag (file tag) (let ((tags (car (rassoc file *photogal-operating-table*)))) (setcar (rassoc file *photogal-operating-table*) (cons tag tags)))) (delete-directory *operating-photo-dir* t) (copy-directory *photo-dir* *operating-photo-dir*) (defun all-photos () (directory-files *operating-photo-dir* t directory-files-no-dot-files-regexp)) (all-photos) (define-derived-mode photogal-mode text-mode "photogal" "Major mode for grouping and labeling images.") (defun photogal-init () (interactive) (let ((buf (get-buffer-create "photogal")) (photos (all-photos))) (with-current-buffer buf (photogal-mode) (erase-buffer) (insert "\n") (insert " ") (insert-image ;; (create-image (car photos) 'imagemagick nil :width (- (window-pixel-width) 75)) (create-image (car photos) 'imagemagick nil :height (/ (window-pixel-height) 2))) (insert "\n\n") ) buf) (switch-to-buffer (get-buffer-create "photogal"))) (defun photogal-selfie () (interactive) (photogal-add-tag *photogal-current-file* "selfie") (message *photogal-current-file*)) (transient-define-prefix photogal-tag () [["Commit" ("c" "Tag: selfie" photogal-selfie)]] (interactive) (setq *my-photo-args* (transient-args 'photogal-categorize)) (message (transient-args 'photogal-categorize)) (transient-setup 'photogal-tag)) (setq photogal-raw-tags '(("s" . "selfie") ("c" . "cityscape"))) (defun photogal-auto-tags () (let ((args (mapcar (lambda (tag) (list (car tag) " " (cdr tag))) photogal-raw-tags))) (vconcat (cons "Arguments" args)))) (setq photogal-tags (photogal-auto-tags)) (defun photogal-add-tag (new-tag new-tag-code) (interactive "sNew tag: \nsTag code: ") (setq photogal-raw-tags (cons (cons new-tag-code new-tag) photogal-raw-tags)) (setq photogal-tags (photogal-auto-tags)) (eval `(transient-define-prefix photogal-categorize () "Tag a photo." ,photogal-tags [["Tag" ("t" "Tag" photogal-tag) ("a" "Add tag" photogal-add-tag)]] (interactive) (setq *photogal-current-file* (car (all-photos))) (transient-setup 'photogal-categorize))) (transient-setup 'photogal-categorize)) (transient-define-prefix photogal-categorize () "Tag a photo." photogal-tags [["Tag" ("t" "Tag" photogal-tag) ("a" "Add tag" photogal-add-tag)]] (interactive) (setq *photogal-current-file* (car (all-photos))) (transient-setup 'photogal-categorize)) (photogal-categorize) (message *my-tags*)