From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Kitchin Subject: Re: Structuring and (cross)linking information in org-mode Date: Wed, 08 Jul 2015 10:32:53 -0400 Message-ID: References: <0C6EB88C-208A-4378-8475-B39A6D40F9D3@daniel-hertrich.photo> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:33301) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZCqPK-0006Df-Ht for emacs-orgmode@gnu.org; Wed, 08 Jul 2015 10:33:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZCqPG-0005D2-B6 for emacs-orgmode@gnu.org; Wed, 08 Jul 2015 10:33:06 -0400 Received: from mail-qk0-x22a.google.com ([2607:f8b0:400d:c09::22a]:34516) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZCqPG-0005C8-2g for emacs-orgmode@gnu.org; Wed, 08 Jul 2015 10:33:02 -0400 Received: by qkeo142 with SMTP id o142so164193697qke.1 for ; Wed, 08 Jul 2015 07:33:00 -0700 (PDT) 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: Daniel Hertrich Cc: emacs-org list Daniel Hertrich writes: > Dear John, > > also to you, many thanks for your time to answer so many questions of min= e. > I=E2=80=99ll comment them below: > > >> Am 03.07.2015 um 16:02 schrieb John Kitchin : >> >> This all sounds doable, but it will take some work ;) >> > > I guessed so. ;-) But that=E2=80=99s the trade-off. Take some ready-made = software that works out of the box, but then it won=E2=80=99t work as you w= ant it to work. The other extreme is to program a personalized solution ent= irely on your own. I have done this before. But I hope Emacs is something i= n-between. The framework is there, and it=E2=80=99s only a matter of writin= g some scripts to make it work exaclty as I wish. > The problem is also, that I don=E2=80=99t know exactly in advance how I= =E2=80=99d like > it to work. These wishes will evolve with time. Another advantage of > scripting an existend application. I can adapt it easier to new > requirements than re-writing an entire application. ;-) I think Emacs+org-mode is somewhere in the middle there. > > >>> I know how to make tasks with the org-todo-keywords. >>> Now I want to mark chunks of information in that file in a similar >>> way, but keep it outside of the task workflow. I=E2=80=99d like to have= that >>> information accessible and finable easily, and I want to >>> differentiate different kinds of information. You might look at inlinetasks. C-c C-x t you can put headline like items in a headline that doesn't change the headline level. >>> >>> Quick example: >>> >>> * TODO This is my first task >>> Some task description goes here >>> >>> * MEETINGNOTE of meeting 2015-07-02 MyCompany >> >> I think you should probably use a tag of :MEETINGNOTE: here, instead of >> a TODO keyword like this. TODO keywords imply to me some kind of >> changeable state not a type of content. Alteratively you could make it a >> property. >> >> with your curson on the headline, type C-c C-c and enter MEETINGNOTE to >> add the tag. > > I have to press =E2=80=9ETAB=E2=80=9C (=E2=80=9Efree=E2=80=9C) before ent= ering a new tag. Might be > because I already defined some tags to be used in quick access. > You are right, somehow a tag is more suuitable for this kind of marking i= nformation. > However, I just came across the possiblitiy of defining several TODO keyw= ord workflows in parallel. I could imagine to have one for my own todos (TO= DO), one for other people=E2=80=99s todos that I=E2=80=99m monitoring (TASK= ) and maybe also one for information that expires or becomes outdated. Like= this, partially taken from the org-secretary explanation, but adapted by m= e: > > (setq org-todo-keywords > '((sequence "TODO(t)" "|" "DONE(d)" "CANCELLED(c)") > (sequence "TASK(f)" "|" "DONE(d)") > (sequence =E2=80=9EINFO(i)" "|=E2=80=9C =E2=80=9EINFO-EXPIRED(e)"= ))) This is certainly reasonable. I use this for various states of proposals and manuscripts. For example, just in a file called manuscripts.org, I have this at the top: #+TODO: TODO PREPARATION | SUBMITTED REVISING | ACCEPTED DONE REJECTED and in proposals.org: #+TODO: TODO PENDING | DONE DECLINED AWARDED EXPIRED In my mind TODO keywords should represent states of a headline, not categories (which I use tags for). Although states can also be used as a category, e.g. all PENDING proposals. I think the INFO/INFO-EXPIRED should be tags though (just my opinion). What headline is not information? and when it is expired, it should be archived. > > Or would you consider this total nonsense? I know there is the > archiving feature. Maybe expired info should be archived instead of > maker =E2=80=9Eexpired=E2=80=9C? ;-) The point of archiving in org-mode is to keep the information out of the agenda. You can use a tag ARCHIVE (C-c C-x a) for this if you want to keep the headline in the file, or setup archiving to move the headline to a new file with C-c C-x C-a. > > This brings me to another idea: Maybe you know the outliner =E2=80=9ENote= Case > Pro=E2=80=9C (www.notecasepro.com ). I have > written some plugins for it (www.notecaseproplugins.com > ), one of them being a plugin for > helping to keep your files clean. One way to keep them clean is to > assign an expiry date to every chunk of information in the file. If > you generate an entry, you are automatically asked to quickly choose a > validity time span (only a rough one, so you don't need to think too > much at this point: one day, one week, one month, one year, 5 years, > forever). Based on your selection, the plugin sets the corresponding > date in the ffuture as expiry date for this piece of > information. Everytime you open your file, the plugin searches for > expired info and present only one expired info per session (so you are > not overwhelemed by having to make decisions) to you and lets you > choose to archive it, prolong the validity time span or to delete the > expiry date entirely. You could pretty easily "expire" headlines based on a date. see http://orgmode.org/w/?p=3Dorg-mode.git;a=3Dblob_plain;f=3Dcontrib/lisp/org-= expiry.el;hb=3DHEAD > I think in times of gigantic flood of information we need such mechanisms= to be able to maintain our information. > > Does something like this exist for Emacs, too? Or is it already easily > possible by using dates and the agenda=E2=80=A6? I bet you can filter the agenda to not show content older than some date. > > >> >>> ** participants >>> *** =E2=80=94> John Doe >>> *** =E2=80=94> Mary Sample >>> ** Goal >>> This is the description of meeting goal >>> ** Outcome >>> Outcome of the meeting >>> >>> >>> * PERSON John Doe >>> Street address >>> email address >>> telephone >>> >> PERSON should also be a tag, or look at org-contacts, where those bits >> in the body would be stored as properties. > > org-contacts seems to have a similar use case as BBDB (big brother > data base). What is better? :-D I know, this is a very sloppy > question. I use org-contacts. I looked at bbdb for a while, but it did not stick with me. The cumulative advantage of contacts in org syntax won out. I also thought bbdb was underdocumented. > New attempt: Which one would you recommend? I=E2=80=99d like to have a > full-fledged contacts database that i=E2=80=99d like to sync with CardDAV > servers and possibly iCloud, so that ai can use the same address data > in any email client / telephone assistance solution on the Mac, and > also inside Emacs for referring to todos etc., maybe to write letters > inside Emacs with LaTex export and automatic inclusion of the snail > mail address of the person etc. etc. All on a Mac. (Currently using > Aquamacs, but maybe switching to Emacs Mac Port later, as that seems > to be more standard, more stable and also less performance-hungry). You will be writing a lot of code to do all that ;) org-contacts can be made to do a lot of those things. my helm contacts can insert email addresses, open urls, could send tweets, etc... depending on what information is available in a contact. I use emacs on Mac built from homebrew. >>> >>> - I=E2=80=99d like to have all the info (cross)linked, so that if I cli= ck >>> e.g. on any occurrence of =E2=80=9EJohn Doe=E2=80=9C I=E2=80=99d like t= o see a list of matches >>> that mention John Doe: his PERSON entry, the notes of meetings he >>> participated, the company he is an employee of etc. How can I mark up >>> info in a way that Emacs or org links such info? Or isn=E2=80=99t this >>> possible? Do I have to use Gnowsys or something like that for this? >> >> This is not totally possible, org-mode does not know how to make "John >> Doe" clickable unless you make a special link. but see: http://kitching= roup.cheme.cmu.edu/blog/2015/06/22/Clickable-org-contacts-in-text-files/ > > Ah, interesting! Not exactly what I had in mind, but this inspires me to = think about a good solution for what I actually want. > Somehow it=E2=80=99s probably possible to make clickable links that call = lisp code, which does not, as in the above example, searches the org-contac= ts, but instead triggers the agenda with a search for that person=E2=80=99s= name, so that as a result I have an agenda / match view of all occurrence= s of that name in my file(s)? You can call any emacs-lisp code you want, even a menu of options to do a variety of different things. My current code gives me a hydra menu to open the contact, email the contact or open their homepage if there is one in the contact. It would be easy to extend it to direct message them on twitter if there is a twitter handle, probably call them on skype with a skype handle (reaching here, assuming skype can be automated by applescript or some other command line incantation), or use some kind of telephony from a phonenumber. The menu is even conditional, and changes with available contact info. You could do that for a bbdb entry too. >>> - I=E2=80=99d like to be able to search all =E2=80=9EPERSON=E2=80=9C en= tries for a specific >>> name. >> See org-contacts. i integrated something like this into helm: >> http://kitchingroup.cheme.cmu.edu/blog/2015/03/14/A-helm-mu4e-contact-se= lector/ >> which I use all the time. > > Oh yes, email is also something which I=E2=80=99d maybe like to integrate= into Emacs later. > Thanks for the pointer. mu4e looks promising. I=E2=80=99d be interested i= n a > comparison chart of email clients that work with / inside > Emacs. However, I haven=E2=80=99t found any yet. Do you know something li= ke > this? Not really. Some people use gnus. that also did not stick with me. mu4e + offlineimap + gmail is pretty sweet, and easy to install with homebrew on mac. > > >> >>> >>> - I=E2=80=99d like to be able to archive chunks of information, e.g. a >>> MEETINGNOTE that=E2=80=99s obsolete, equally as I can do it with tasks >> >> C-c C-x a will archive a headline. you can only archive headlines, not >> pieces of text. This might be C-c C-x C-a. The keys above add an archive tag to the headlin= e. > > Good enough I guess. Great! :-) > > > >> >>> >>> - I=E2=80=99d like to filter, i.e. have Emacs only show me e.g. the >>> =E2=80=9EMEETINGNOTES=E2=80=9C entries with all their text, but filter = out everything >>> else. Maybe even only =E2=80=9EMEETINGNOTES=E2=80=9C with tag =E2=80=9E= XY=E2=80=9C=E2=80=A6 combined >>> filtering. Possible via Agenda, as I understand it, at least >>> partially. Matching tags and combinations of tags etc. >> >> This sounds pretty doable with tag/property searches. > > Great! > > Slowly my image of what my setup might look like gets clearer and clearer. > > Thanks! > Daniel -- 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