From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Thum Subject: Re: More helm awesomeness Date: Mon, 19 Jan 2015 21:46:18 +0100 Message-ID: <54BD6D1A.6030209@gmx.de> References: <54BC3079.1030706@gmx.de> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:36420) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YDJDP-0005yh-AQ for emacs-orgmode@gnu.org; Mon, 19 Jan 2015 15:46:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YDJDK-0001Nb-Cs for emacs-orgmode@gnu.org; Mon, 19 Jan 2015 15:46:27 -0500 Received: from mout.gmx.net ([212.227.17.22]:63738) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YDJDK-0001NR-1R for emacs-orgmode@gnu.org; Mon, 19 Jan 2015 15:46:22 -0500 In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: John Kitchin Cc: emacs-orgmode Hi John, thank you for the fast response! That's more than I had hoped for, I'm sure I'll get through now. I'll report back when something tangible is there. Cheers, Simon On 01/19/2015 04:57 PM, John Kitchin wrote: > You can do something like this to get just the TODO headlines in the > current buffer. If you make the helm-todo-candidates map over all the > files in (org-agenda-files) you can make it give all the TODO > headings. You can change the match criteria in org-map-entries to be > more selective. > > #+BEGIN_SRC emacs-lisp :results raw > (defun helm-todo-candidates () > (let ((results '())) > (org-map-entries > (lambda () > (add-to-list 'results > (cons > (concat (make-string (nth 1 (org-heading-components)) ?*) > " TODO " > (nth 4 (org-heading-components))) > (point-marker)))) > "TODO=\"TODO\"") > results)) > #+END_SRC > > #+RESULTS: > ((** post it . #) (** work it out . #)) > > Now to run helm, there is a subtle point. We need to map the current buffer /before/ running helm, otherwise we will map an empty helm buffer. > > #+BEGIN_SRC emacs-lisp > (defun helm-todo () > "Helm interface to headlines with TODO status in current buffer." > (interactive) > (let ((candidates (helm-todo-candidates))) > (setq helm-todo-source '((name . "TODO headlines") > (candidates . candidates) > (action . (("open" . goto-char))))) > (helm :sources '(helm-todo-source)))) > > (helm-todo) > Simon Thum writes: > >> Hi all, >> >> I recently updated my helm install so it includes >> helm-org-agenda-headings which is just AWESOME (to me at least). A bit >> like org-goto but across all agenda files at once, with goto, refile, >> linking built in. If you haven't tried it, I definitely recommend to do so. >> >> >> Yet I'm missing a few things so far, I would like to have different >> datasources differentiated by tags, in particular the ARCHIVE tag, and >> the infamous FILETAGS so I cannot just regex my way through as the >> current approach does. >> >> This requires making more use of org-ode when filling helm's buffers. My >> elisp isn't great but I might be able to get there if the approach is sane. >> >> Any pointers are welcome! If you might help me please read on. >> >> I would like to ask what would be the best approach for better utilising >> org infrastructure so I may have separate helm sources for >> live/archived, private/work, the clocking history, stuff like that. >> >> The helm-org definition looks deceptively simple: >> >> https://github.com/emacs-helm/helm/blob/master/helm-org.el >> >> (defun helm-org-agenda-files-headings () >> (interactive) >> (helm :sources (helm-source-org-headings-for-files (org-agenda-files)) >> :candidate-number-limit 99999 >> :buffer "*helm org headings*")) >> >> >> FWICT, in effect helm-org is chewing itself through the buffers: >> >> (defun helm-get-org-candidates-in-file (filename min-depth max-depth >> &optional fontify) >> (with-current-buffer (find-file-noselect filename) >> (and fontify (jit-lock-fontify-now)) >> (let ((match-fn (if fontify 'match-string 'match-string-no-properties))) >> (save-excursion >> (goto-char (point-min)) >> (cl-loop while (re-search-forward org-complex-heading-regexp nil t) >> if (let ((num-stars (length (match-string-no-properties 1)))) >> (and (>= num-stars min-depth) (<= num-stars max-depth))) >> collect `(,(funcall match-fn 0) . ,(point-marker))))))) >> >> I don't really get what it does but I have a hunch that org-element or >> other org-mode functions could be used to achieve the same with more >> precision. That's what I would need to do. FWIW I'd be happy to take a >> performance hit. >> >> Thanks in advance, >> >> Simon > > -- > Professor John Kitchin > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > http://kitchingroup.cheme.cmu.edu >