[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/filechooser fe52fac716 4/6: Rework of selection + provi
From: |
ELPA Syncer |
Subject: |
[elpa] externals/filechooser fe52fac716 4/6: Rework of selection + provide deselection commands |
Date: |
Sat, 24 Feb 2024 12:58:06 -0500 (EST) |
branch: externals/filechooser
commit fe52fac716c73a787cc07362d86e1920e224ed3a
Author: Rahguzar <rahguzar@zohomail.eu>
Commit: Rahguzar <rahguzar@zohomail.eu>
Rework of selection + provide deselection commands
---
filechooser.el | 59 +++++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 46 insertions(+), 13 deletions(-)
diff --git a/filechooser.el b/filechooser.el
index 73c1f4e8c6..ce8518a541 100644
--- a/filechooser.el
+++ b/filechooser.el
@@ -30,6 +30,7 @@
(define-key map (kbd "C-c C-c") #'exit-recursive-edit)
(define-key map (kbd "C-c C-k") #'filechooser-abort)
(define-key map (kbd "C-c C-s") #'filechooser-dired-selection-mode)
+ (define-key map (kbd "C-c C-u") #'filechooser-dired-clear-selection)
(define-key map (kbd "C-f") #'filechooser-toggle-filter)
(define-key map [remap abort-recursive-edit] #'filechooser-abort)
map)
@@ -438,19 +439,39 @@ without exiting file selection."
(declare-function filechooser--adjust-selection-buffer nil)
(declare-function filechooser--process-changed-marks nil)
+(declare-function filechooser-dired-clear-selection nil)
+
+(let ((selection (make-hash-table :test #'equal))
+ timer)
-(let (marked unmarked timer)
(defun filechooser--adjust-selection-buffer ()
(when (buffer-live-p (cdr filechooser--selection))
(with-current-buffer (cdr filechooser--selection)
- (cl-callf cl-set-difference (cdr dired-directory) unmarked :test
#'equal)
- (when marked
- (cl-callf nreverse (cdr dired-directory))
- (dolist (file marked)
- (cl-pushnew file (cdr dired-directory) :test #'equal))
- (cl-callf nreverse (cdr dired-directory)))
+ (setf (cdr dired-directory) (hash-table-keys selection))
(revert-buffer)))
- (setq marked nil unmarked nil timer nil))
+ (setq timer nil))
+
+ (defun filechooser-dired-clear-selection (&optional beg end)
+ "Remove files from BEG to END from selection."
+ (interactive)
+ (with-current-buffer (cdr filechooser--selection)
+ (let ((dired-marker-char (get 'filechooser-dired-marker
'filechooser--original))
+ (filechooser-dired-selection-mode nil))
+ (if (eq t end)
+ (dired-mark beg t)
+ (dired-mark-files-in-region (or beg (point-min)) (or end
(point-max))))
+ (let ((files (delq nil (dired-map-over-marks
+ (dired-get-filename nil t) nil))))
+ (dolist (buf filechooser--dired-buffers)
+ (when (buffer-live-p buf)
+ (with-current-buffer buf
+ (save-excursion
+ (dolist (file files)
+ (dired-goto-file file)
+ (dired-unmark nil))))))
+ (dolist (file files)
+ (remhash file selection)))))
+ (filechooser--adjust-selection-buffer))
(defun filechooser--process-changed-marks (beg end _length)
"Deal with change in mark from BEG to END."
@@ -462,12 +483,17 @@ without exiting file selection."
(goto-char beg)
(when (and (re-search-forward dired-re-mark end t)
(eq (preceding-char) dired-marker-char))
- (push (dired-get-filename nil t) marked))
+ (puthash (dired-get-filename nil t) t selection))
(when (re-search-forward dired-re-maybe-mark (1+ end) t)
- (push (dired-get-filename nil t) unmarked))
+ (remhash (dired-get-filename nil t) selection))
(unless timer
(setq timer (run-with-timer
0.2 nil #'filechooser--adjust-selection-buffer)))))))
+(defun filechooser-dired-deselect (arg &optional interactive)
+ "Deselect the file at point in selection buffer.
+See `dired-mark' for ARG and INTERACTIVE."
+ (interactive (list current-prefix-arg t))
+ (filechooser-dired-clear-selection arg interactive))
(defun filechooser--dired-setup-buffer (_)
"Setup the current buffer for file selection."
(when (and (derived-mode-p 'dired-mode)
@@ -494,6 +520,8 @@ editing session. FILTERS are in the format of
`filechooser-filters'."
(unwind-protect
(progn (setcdr filechooser--selection
(dired-noselect (list (car filechooser--selection))))
+ (filechooser-dired-selection-mode)
+ (filechooser-dired-clear-selection)
(display-buffer selection-buffer
'(display-buffer-in-side-window
(side . left)
(window-width . 0.3)))
(when-let ((win (get-buffer-window (cdr
filechooser--selection))))
@@ -503,7 +531,12 @@ editing session. FILTERS are in the format of
`filechooser-filters'."
(setq mode-line-format " Selected files")
(dired-hide-details-mode)
(add-hook 'jit-lock-functions
#'filechooser--dired-jit-abbreviate 95 t)
- (jit-lock-mode t))
+ (jit-lock-mode t)
+ (let ((map (make-sparse-keymap)))
+ (set-keymap-parent map (current-local-map))
+ (define-key map [remap dired-unmark]
#'filechooser-dired-deselect)
+ (define-key map [remap dired-unmark-all-marks]
#'filechooser-dired-clear-selection)
+ (use-local-map map)))
(push overriding-map emulation-mode-map-alists)
(add-hook 'window-buffer-change-functions
#'filechooser--dired-setup-buffer)
(add-hook 'after-change-functions
#'filechooser--process-changed-marks)
@@ -516,9 +549,9 @@ editing session. FILTERS are in the format of
`filechooser-filters'."
(filechooser--adjust-selection-buffer)
(with-current-buffer (cdr filechooser--selection)
(cdr dired-directory))))
- (filechooser-dired-selection-mode -1)
(cl-callf2 delq overriding-map emulation-mode-map-alists)
- (remove-hook 'window-buffer-change-functions apply-filters)
+ (filechooser-dired-clear-selection)
+ (filechooser-dired-selection-mode -1)
(remove-hook 'window-buffer-change-functions
#'filechooser--dired-setup-buffer)
(remove-hook 'after-change-functions
#'filechooser--process-changed-marks)
(kill-buffer (cdr filechooser--selection))
- [elpa] externals/filechooser updated (163814d4a1 -> ff91db2446), ELPA Syncer, 2024/02/24
- [elpa] externals/filechooser 470163374a 5/6: Make delay in selection buffer update customizable, ELPA Syncer, 2024/02/24
- [elpa] externals/filechooser dfc15de25e 1/6: Don't loose changes on exit, ELPA Syncer, 2024/02/24
- [elpa] externals/filechooser 32ef643dcd 3/6: Track dired buffers + refactor in filechooser-dired, ELPA Syncer, 2024/02/24
- [elpa] externals/filechooser fe52fac716 4/6: Rework of selection + provide deselection commands,
ELPA Syncer <=
- [elpa] externals/filechooser ff91db2446 6/6: Let bind filechooser--filters, ELPA Syncer, 2024/02/24
- [elpa] externals/filechooser 309b96f6b1 2/6: Explicit marker char and minor mode for Dired based selection, ELPA Syncer, 2024/02/24