* Sparse trees and searching for multiple words @ 2010-09-19 8:48 Tom 2010-09-21 17:20 ` Ilya Shlyakhter 2010-09-22 2:46 ` Matt Lundin 0 siblings, 2 replies; 4+ messages in thread From: Tom @ 2010-09-19 8:48 UTC (permalink / raw) To: emacs-orgmode I see sparse trees can be constructed by searching for a regexp, but I can't find the same ability for multiple searches. For example, I'd like to see entries which contains the words 'cat' and 'dog' in any order. Or 'apple', 'orange', 'melon', 'plum' and 'pear' in any order. Searching for multiple keywords in a single operation is a pretty basic feature. I recommend adding it if currently there is no way to do it in org. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Sparse trees and searching for multiple words 2010-09-19 8:48 Sparse trees and searching for multiple words Tom @ 2010-09-21 17:20 ` Ilya Shlyakhter 2010-09-21 22:14 ` Scot Becker 2010-09-22 2:46 ` Matt Lundin 1 sibling, 1 reply; 4+ messages in thread From: Ilya Shlyakhter @ 2010-09-21 17:20 UTC (permalink / raw) To: emacs-orgmode > For example, I'd like to see entries which contains the words 'cat' and > 'dog' in any order. Or 'apple', 'orange', 'melon', 'plum' and 'pear' > in any order. Maybe this will help: http://www.emacswiki.org/emacs/StringPermutations ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Re: Sparse trees and searching for multiple words 2010-09-21 17:20 ` Ilya Shlyakhter @ 2010-09-21 22:14 ` Scot Becker 0 siblings, 0 replies; 4+ messages in thread From: Scot Becker @ 2010-09-21 22:14 UTC (permalink / raw) To: Ilya Shlyakhter; +Cc: emacs-orgmode Tom, I agree that a flexible multi-term search would be a great addition to org-mode and Emacs in general. I'd say that Google has spoiled us, but like all who are spoiled I believe my inflated desires to be perfectly reasonable! I'm keeping more and more notes in org-mode, and the more I keep, the more this comes up. I had a look at the page Ilya suggested, and got the 'first alternative' to work with org-occur (code below), but I also followed the links there and it looks like Drew Adams has done some significant work in this regard with his 'icicles' library. See his discussion on search here: http://www.emacswiki.org/emacs/Icicles_-_Search_Commands%2c_Overview For example, using M-x icicles-search you can specify both a 'search context' (for example sentences, paragraphs, or any other span of text that you can define with a regexp.... perhaps org-mode outline nodes?), then from there you can drill down with one search term after another. This amounts to a progressive AND search, like what you're asking for. And as I remember, icicles does have a pretty good set of commands for tweaking searches in progress. Not Google Instant, but if it works, it could be pretty good. I'm not sure if you could somehow do org-sparse trees with something like this. On a first attempt a year ago, I wasn't able to swallow the icicles pill whole. I went back to ido in the end---partly because I couldn't manage the complexity. But `icicles-search' really motivates me to refresh my configuration and see if it is useful, at least for this kind of thing. For a simpler and less flexible solution, here is the code from the 'String Permutations' page, with the top-level function rewritten to call org-occur. It works reasonably well for the kind of searches you are asking about, but the search terms do have to be on the same line. This is less of a problem if, like me, you are using visual-line-mode and your paragraphs don't have newlines breaking them up. (defun scb/search-words-any-order (keywords) "Search for a comma-separated list of terms in any order." (interactive "sKeywords: (comma-separated) ") (org-occur (my-csv-string-to-regexp keywords))) (defun my-csv-string-to-regexp (str) "Translate comma separated values into regexp. A,B,C turns into \\(A.*B.*C\\|A.*C.*B\\|B.*A.*C\\|B.*C.*A\\|C.*A.*B\\|C.*B.*A\\)" (let* ((l (perms (split-string str ",\\s-*")))) (mapconcat (function (lambda (n) (mapconcat 'identity n ".*"))) l "\\|"))) ;; thanks to Christoph Conrad <cc@cli.de> (require 'cl) (defun perms (l) (if (null l) (list '()) (mapcan #'(lambda( a ) (mapcan #'(lambda( p ) (list (cons a p))) (perms (remove* a l :count 1)))) l))) Scot On Tue, Sep 21, 2010 at 6:20 PM, Ilya Shlyakhter <ilya_shl@alum.mit.edu> wrote: >> For example, I'd like to see entries which contains the words 'cat' and >> 'dog' in any order. Or 'apple', 'orange', 'melon', 'plum' and 'pear' >> in any order. > > Maybe this will help: http://www.emacswiki.org/emacs/StringPermutations > > > > _______________________________________________ > Emacs-orgmode mailing list > Please use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Sparse trees and searching for multiple words 2010-09-19 8:48 Sparse trees and searching for multiple words Tom 2010-09-21 17:20 ` Ilya Shlyakhter @ 2010-09-22 2:46 ` Matt Lundin 1 sibling, 0 replies; 4+ messages in thread From: Matt Lundin @ 2010-09-22 2:46 UTC (permalink / raw) To: Tom; +Cc: emacs-orgmode Tom <levelhalom@gmail.com> writes: > I see sparse trees can be constructed by searching for a regexp, but I > can't find the same ability for multiple searches. > > For example, I'd like to see entries which contains the words 'cat' and > 'dog' in any order. Or 'apple', 'orange', 'melon', 'plum' and 'pear' > in any order. > > Searching for multiple keywords in a single operation is a pretty > basic feature. I recommend adding it if currently there is no way to > do it in org. For such searches, I use org-search-view: C-c a s +cat +dog [RET] This will pull up the headlines for all entries that contain the substrings cat and dog in any order. By default, org-search-view treats the entry as a single substring if there are no plus or minus signs. E.g., C-c a s cat dog [RET] ...will find only those entries that have the precise string "cat dog". For searches more like Google's (i.e., lazy booleans), you can set the variable org-agenda-search-view-always-boolean to t. Then, a search such as: C-c a s cat dog [RET] ...will find all entries that have the words cat and dog in any order. ,----[ C-h v org-agenda-search-view-always-boolean ] | When this is non-nil, the string will be split on whitespace, and each | snippet will be searched individually, and all must match in order to | select an entry. `---- If you want to force "cat" and "dog" to match full words only, you can set the variable org-agenda-search-view-force-full-words to t. Best, Matt ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-09-22 2:46 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-09-19 8:48 Sparse trees and searching for multiple words Tom 2010-09-21 17:20 ` Ilya Shlyakhter 2010-09-21 22:14 ` Scot Becker 2010-09-22 2:46 ` Matt Lundin
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).