Allow mulitple values to be read for org-ql-view-buffers-files
commitd8f29225a3Author: Ahmed Shariff <shariff.mfa@outlook.com> Date: Fri Sep 24 15:47:38 2021 -0500 Abstract buffers-files being flattened to a list of strings commit2d49745425Author: Ahmed Shariff <shariff.mfa@outlook.com> Date: Fri Sep 17 17:53:21 2021 -0500 Fix: \w duplicates & func's with buffers/names with expand/contract commit576f9d3512Author: Ahmed Shariff <shariff.mfa@outlook.com> Date: Thu Sep 16 18:42:32 2021 -0500 Handling support for functions \w functions using completing-read-multiple commitcea165192dAuthor: Ahmed Shariff <shariff.mfa@outlook.com> Date: Thu Sep 16 16:49:19 2021 -0500 Cleaning up functions and improvements for clarity. commitaa9c6ccdfaAuthor: Ahmed Shariff <shariff.mfa@outlook.com> Date: Wed Sep 15 17:56:19 2021 -0500 Adding `comma separated` instruction to readme commit564d491604Author: Ahmed Shariff <shariff.mfa@outlook.com> Date: Mon Sep 13 17:05:14 2021 -0500 Fixes for using mulitiple values and related test suite improvements commitffaebcbcbeMerge:788951a94f9e6fAuthor: Ahmed Shariff <shariff.mfa@outlook.com> Date: Mon Sep 13 13:15:57 2021 -0500 Merge branch 'master' of https://github.com/alphapapa/org-ql commit788951a4a9Author: Ahmed Shariff <shariff.mfa@outlook.com> Date: Mon Sep 13 11:01:55 2021 -0500 Replacing org-ql-view--expand-buffers-files commitcabf88eea5Author: Ahmed Shariff <shariff.mfa@outlook.com> Date: Mon Jul 19 00:19:52 2021 -0500 removing duplcates when expanding buffers-files commitb68d836562Author: Ahmed Shariff <shariff.mfa@outlook.com> Date: Sun Jul 18 23:49:54 2021 -0500 Using completing-read-multiple for org-ql-view--complete-buffers-files commit06bdfc7a9eAuthor: Ahmed Shariff <shariff.mfa@outlook.com> Date: Sun Jul 4 23:32:08 2021 -0500 Fn always promts for buffer/files; handle buffer obj and list Fn: org-ql-view--complete-buffers-files With buffers, org-ql-view--contract-buffers-files return the buffer name. When org-ql-view-buffers-files is a list, just dumpt it as a string and check if completion-read returns the same value, if so return the original value of org-ql-view-buffers-files commitcc6e22dd30Author: Ahmed Shariff <shariff.mfa@outlook.com> Date: Sun Jul 4 23:31:31 2021 -0500 Allow reading buffer names for buffers-or-names commit89b84768adAuthor: Ahmed Shariff <ahmed.shariff@live.com> Date: Sat Jul 3 21:25:10 2021 -0500 Test cases for all org-ql-view--*-buffers-files functions commit7120b6334dAuthor: Ahmed Shariff <shariff.mfa@outlook.com> Date: Sat Jul 3 02:17:33 2021 -0500 Refactor of org-ql-view--complete-buffers-files Handles the different values `org-ql-view-buffers-files` can hold. Use completing-read only if `org-ql-view-buffers-files` is nil or the contracted form of `org-ql-view-buffers-files` is a string. commit7b990e5275Author: Ahmed Shariff <shariff.mfa@outlook.com> Date: Wed Jun 30 18:01:49 2021 -0500 Fix for issue with initial-input in org-ql-view--complete-buffers-files
This commit is contained in:
parent
5f70636556
commit
4b19e5fb0b
2 changed files with 99 additions and 43 deletions
|
|
@ -132,7 +132,7 @@ Read ~QUERY~ and search with ~org-ql~. Interactively, prompt for these variable
|
||||||
+ ~buffer~: search the current buffer
|
+ ~buffer~: search the current buffer
|
||||||
+ ~all~: search all Org buffers
|
+ ~all~: search all Org buffers
|
||||||
+ ~agenda~: search buffers returned by the function ~org-agenda-files~
|
+ ~agenda~: search buffers returned by the function ~org-agenda-files~
|
||||||
+ A space-separated list of file or buffer names
|
+ A comma-separated list of file, buffer names, or the above keywords
|
||||||
|
|
||||||
~GROUPS~: An ~org-super-agenda~ group set. See variable ~org-super-agenda-groups~.
|
~GROUPS~: An ~org-super-agenda~ group set. See variable ~org-super-agenda-groups~.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1019,6 +1019,27 @@ property."
|
||||||
;; source code of `check-declare' shows that it searches for "cl-defun" declarations.
|
;; source code of `check-declare' shows that it searches for "cl-defun" declarations.
|
||||||
(declare-function org-ql-search-directories-files "org-ql-search" t)
|
(declare-function org-ql-search-directories-files "org-ql-search" t)
|
||||||
|
|
||||||
|
(defun org-ql-view--buffers-files-to-uniq-strings (buffers-files)
|
||||||
|
"Flatten, remove duplicates and convert elements in BUFFERS-FILES to strings.
|
||||||
|
This used by `org-ql-view--contract-buffers-files' and
|
||||||
|
`org-ql-view--expand-buffers-files'. Would signal error
|
||||||
|
if an element is not a buffer or string."
|
||||||
|
(cl-labels ((convert-to-strings
|
||||||
|
;; Expanding all buffers to file names or buffer names to remove duplicate entries.
|
||||||
|
(list) (--map
|
||||||
|
(pcase-exhaustive it
|
||||||
|
((pred bufferp) (or (buffer-file-name it)
|
||||||
|
(buffer-name it)))
|
||||||
|
;; Any values at this point should be a buffer or string.
|
||||||
|
;; Testing for string anyways.
|
||||||
|
((pred stringp) it))
|
||||||
|
list)))
|
||||||
|
(--> buffers-files
|
||||||
|
-flatten
|
||||||
|
-non-nil
|
||||||
|
convert-to-strings
|
||||||
|
-uniq)))
|
||||||
|
|
||||||
(defun org-ql-view--contract-buffers-files (buffers-files)
|
(defun org-ql-view--contract-buffers-files (buffers-files)
|
||||||
"Return BUFFERS-FILES in its \"contracted\" form.
|
"Return BUFFERS-FILES in its \"contracted\" form.
|
||||||
The contracted form is \"org-agenda-files\" if BUFFERS-FILES
|
The contracted form is \"org-agenda-files\" if BUFFERS-FILES
|
||||||
|
|
@ -1033,8 +1054,12 @@ current buffer. Otherwise BUFFERS-FILES is returned unchanged."
|
||||||
(string (expand-file-name it))
|
(string (expand-file-name it))
|
||||||
(otherwise it))
|
(otherwise it))
|
||||||
list)))
|
list)))
|
||||||
|
(let ((contracted-buffers-files
|
||||||
;; TODO: Test this more exhaustively.
|
;; TODO: Test this more exhaustively.
|
||||||
(pcase buffers-files
|
(pcase buffers-files
|
||||||
|
((pred functionp) (pcase buffers-files
|
||||||
|
('org-agenda-files "org-agenda-files")
|
||||||
|
(_ buffers-files)))
|
||||||
((pred listp)
|
((pred listp)
|
||||||
(pcase (expand-files buffers-files)
|
(pcase (expand-files buffers-files)
|
||||||
((pred (seq-set-equal-p (mapcar #'expand-file-name (org-agenda-files))))
|
((pred (seq-set-equal-p (mapcar #'expand-file-name (org-agenda-files))))
|
||||||
|
|
@ -1050,37 +1075,68 @@ current buffer. Otherwise BUFFERS-FILES is returned unchanged."
|
||||||
"org-agenda-files")
|
"org-agenda-files")
|
||||||
((and (pred bufferp) (guard (buffer-file-name buffers-files)))
|
((and (pred bufferp) (guard (buffer-file-name buffers-files)))
|
||||||
(buffer-file-name buffers-files))
|
(buffer-file-name buffers-files))
|
||||||
|
((pred bufferp)
|
||||||
|
(buffer-name buffers-files))
|
||||||
(_ buffers-files))))
|
(_ buffers-files))))
|
||||||
|
;; To filter duplicates with the extend counterpart of this function,
|
||||||
|
;; this needs to be a string or a list of string.
|
||||||
|
;; Hence, making sure the buffers are convered to file names or buffer names.
|
||||||
|
;; Using file-names when it's a file-buffer to avoid duplicates resulting from
|
||||||
|
;; the file-buffer and file name being entered.
|
||||||
|
(cl-typecase contracted-buffers-files
|
||||||
|
(function contracted-buffers-files)
|
||||||
|
(string contracted-buffers-files)
|
||||||
|
(list (org-ql-view--buffers-files-to-uniq-strings contracted-buffers-files))
|
||||||
|
(t (error (format "Value %s is not a string, a valid function or a list of buffer/strings" contracted-buffers-files)))))))
|
||||||
|
|
||||||
(defun org-ql-view--complete-buffers-files ()
|
(defun org-ql-view--complete-buffers-files ()
|
||||||
"Return value for `org-ql-view-buffers-files' using completion."
|
"Return value for `org-ql-view-buffers-files' using completion.
|
||||||
(cl-labels ((initial-input
|
When `org-ql-view-buffers-files' cannot be contracted to a string
|
||||||
() (when org-ql-view-buffers-files
|
representation `org-ql-view-buffers-files' is returned."
|
||||||
|
(let* ((contracted-org-ql-view-buffers-files
|
||||||
|
(when org-ql-view-buffers-files
|
||||||
(org-ql-view--contract-buffers-files
|
(org-ql-view--contract-buffers-files
|
||||||
org-ql-view-buffers-files))))
|
org-ql-view-buffers-files)))
|
||||||
(if (and org-ql-view-buffers-files
|
(initial-input (pcase contracted-org-ql-view-buffers-files
|
||||||
(bufferp org-ql-view-buffers-files))
|
('nil nil)
|
||||||
;; Buffers can't be input by name, so if the default value is a buffer, just use it.
|
('string contracted-org-ql-view-buffers-files)
|
||||||
;; TODO: Find a way to fix this.
|
((pred functionp) contracted-org-ql-view-buffers-files)
|
||||||
org-ql-view-buffers-files
|
((pred listp)
|
||||||
(org-ql-view--expand-buffers-files
|
(mapconcat 'identity contracted-org-ql-view-buffers-files
|
||||||
(completing-read "Buffers/Files: "
|
","))
|
||||||
|
(_ (format "%s" contracted-org-ql-view-buffers-files))))
|
||||||
|
(completion-read-result (if (functionp contracted-org-ql-view-buffers-files)
|
||||||
|
contracted-org-ql-view-buffers-files
|
||||||
|
(completing-read-multiple
|
||||||
|
"Buffers/Files: "
|
||||||
(list 'buffer 'org-agenda-files 'org-directory 'all)
|
(list 'buffer 'org-agenda-files 'org-directory 'all)
|
||||||
nil nil (initial-input))))))
|
nil nil initial-input))))
|
||||||
|
(if (equal completion-read-result initial-input)
|
||||||
|
org-ql-view-buffers-files
|
||||||
|
(org-ql-view--expand-buffers-files completion-read-result))))
|
||||||
|
|
||||||
(defun org-ql-view--expand-buffers-files (buffers-files)
|
(defun org-ql-view--expand-buffers-files (buffers-files)
|
||||||
"Return BUFFERS-FILES expanded to a list of files or buffers.
|
"Return BUFFERS-FILES expanded to a list of files or buffers.
|
||||||
The counterpart to `org-ql-view--contract-buffers-files'."
|
The counterpart to `org-ql-view--contract-buffers-files'.
|
||||||
(pcase-exhaustive buffers-files
|
This always returns a list of string values."
|
||||||
|
(let ((expanded-buffers-files
|
||||||
|
(--> buffers-files
|
||||||
|
-list -non-nil
|
||||||
|
(-map (lambda (buffer-file)
|
||||||
|
(pcase-exhaustive buffer-file
|
||||||
("all" (--select (equal (buffer-local-value 'major-mode it) 'org-mode)
|
("all" (--select (equal (buffer-local-value 'major-mode it) 'org-mode)
|
||||||
(buffer-list)))
|
(buffer-list)))
|
||||||
("org-agenda-files" (org-agenda-files))
|
("org-agenda-files" (org-agenda-files))
|
||||||
("org-directory" (org-ql-search-directories-files))
|
("org-directory" (org-ql-search-directories-files))
|
||||||
((or "" "buffer") (current-buffer))
|
((or "" "buffer")
|
||||||
((pred bufferp) buffers-files)
|
(current-buffer))
|
||||||
((pred listp) buffers-files)
|
((or (pred bufferp)
|
||||||
;; A single filename.
|
;; A single filename.
|
||||||
((pred stringp) buffers-files)))
|
(pred stringp))
|
||||||
|
buffer-file)
|
||||||
|
(_ (error (format "Value %s is not a valid buffer/file" buffer-file)))))
|
||||||
|
it))))
|
||||||
|
(org-ql-view--buffers-files-to-uniq-strings expanded-buffers-files)))
|
||||||
|
|
||||||
(defun org-ql-view--complete-super-groups ()
|
(defun org-ql-view--complete-super-groups ()
|
||||||
"Return value for `org-ql-view-super-groups' using completion."
|
"Return value for `org-ql-view-super-groups' using completion."
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue