* org-git-link does not support locational information within file @ 2011-02-03 15:04 Gregor Kappler 2011-02-11 17:17 ` Bastien 2011-02-13 8:14 ` Leo Alekseyev 0 siblings, 2 replies; 10+ messages in thread From: Gregor Kappler @ 2011-02-03 15:04 UTC (permalink / raw) To: emacs-orgmode Hi org-moders, I started using orgmode a while ago - and it revoluzionized my workflow. I could not keep up with my work without it! Thanks for the most versatile tool I ever used and still learn! I recently found out about org-git-link (http://orgmode.org/worg/org-contrib/org-git-link.html), and realized it would be near perfect for my research usecase: ** Use Case: Project workflow with moving files, linked to in orgmode 1. Often projects do not arrive with a defined structure: In the initial phase I might get several data files and other documents - with little to no long-term specification. Often it is unclear whether the files will evolve into some bigger coauthoring project involving data analyzes. 2. Consequently, in the initial phase of a project, my file management often is messy. Only within my org files the structure is kept clean, respectively is evolving into an appropriate structure. (I heavily use orgmode linking of files and mails.) Also, (nearly) all files are kept in git. 3. I might be tidying file system folders several times during a project. 1. This breaks links. 2. I thought storing links to revisions of files would solve broken links, as links to moved files can be recovered with git. I guess this might be a scenario some fellow org-moders are facing? ** Shortcomings of git-link in current org HEAD Yet, org-git-link currently is too greedy for my daily use: 1. they kill org-links for org headings, if the org files are versioned in a git repository (and all of mine are!) and 2. they kill in-file-search information for versioned non-org files. ** My ugly hack My intermediate solution is to remove/add the git-link hook as appropriate with (add-hook 'org-store-link-functions 'org-git-store-link) (remove-hook 'org-store-link-functions 'org-git-store-link) ** Proposal of a better solution I think a better solution for me would be: 1. use org-git-store-link. 2. use git versioned files transparently, i.e. org-git-store-link should support search (org-ids and text files) in linked git revisions of files. 3. define an interactive function that can update the revision information of a link at mark to the current branch head of the file (so I can update all links to new FS folder structure.) I am still lame at elisp - so my implementation skills are limited. With the great work in org-git-link all backend stuff seems there, only needing more glue. Any hints how to achieve this would be very welcome! Thanks, Gregor -- -- Dr. Gregor Kappler Fakultät für Psychologie Institut für Entwicklungspsychologie und Psychologische Diagnostik http://www.univie.ac.at/Psychologie Universität Wien Liebiggasse 5 A-1010 Wien mail: gregor.kappler@univie.ac.at tel: +43 1 4277 47866 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: org-git-link does not support locational information within file 2011-02-03 15:04 org-git-link does not support locational information within file Gregor Kappler @ 2011-02-11 17:17 ` Bastien 2011-02-11 17:58 ` Samuel Wales ` (2 more replies) 2011-02-13 8:14 ` Leo Alekseyev 1 sibling, 3 replies; 10+ messages in thread From: Bastien @ 2011-02-11 17:17 UTC (permalink / raw) To: Gregor Kappler; +Cc: emacs-orgmode Hi Gregor, Gregor Kappler <gregor.kappler@univie.ac.at> writes: > 2. use git versioned files transparently, i.e. org-git-store-link > should support search (org-ids and text files) in linked git > revisions of files. I've look into this. We could code things to add a search string: [[git:~/my.org::master@{2011-02-07}::Org code]] ^^ ... but I'm reluctant to change the general syntax of links, even if that's just for git links. > 3. define an interactive function that can update the revision > information of a link at mark to the current branch head of the > file (so I can update all links to new FS folder structure.) You mean update [[git:~/my.org::master@{2011-02-07}::Org code]] to [[git:~/my.org::master@{2011-02-11}::Org code]] ? Can you provide an explicit example? > I am still lame at elisp - so my implementation skills are > limited. With the great work in org-git-link all backend stuff seems > there, only needing more glue. Any hints how to achieve this would be > very welcome! org-git-link.el is quite readable, and I'd welcome ideas on how to extend it to fulfill your wishes without extending Org's link syntax too much... Thanks! -- Bastien ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: org-git-link does not support locational information within file 2011-02-11 17:17 ` Bastien @ 2011-02-11 17:58 ` Samuel Wales 2011-02-11 18:05 ` Samuel Wales 2011-02-12 11:17 ` Bastien 2011-02-13 12:20 ` Achim Gratz 2011-02-15 20:11 ` Gregor Kappler 2 siblings, 2 replies; 10+ messages in thread From: Samuel Wales @ 2011-02-11 17:58 UTC (permalink / raw) To: Bastien; +Cc: Gregor Kappler, emacs-orgmode Hi Bastien, I think your reluctance to change the syntax is understandable. Then again, I'm a proponent of simple syntax. That is one reason I like Lisp. > org-git-link.el is quite readable, and I'd welcome ideas on how to > extend it to fulfill your wishes without extending Org's link syntax > too much... It can be done without extending Org's link syntax at all. I think questions of syntax are important. Over time, syntaxes get complicated, and we need more features, but fear to add them. Sometimes we end up stuck in the middle, with complicated regexps, not always factored, not quite sure how it will export or whether it can be nested or combined or what other syntaxes it will work with or how search will find it, but also lacking a feature somebody wants. Adding a feature can sometimes raise questions of how to quote or escape literal strings that look exactly like the special syntax for the feature. I wrote about this in a post called parsing risk with greater care than I can apply here. For new features, I think it would be good to consider extensible syntax, which is a specific, documented proposal for a universal syntax in which you can add things without breaking other things. A very small amount of code is necessary to add a new subfeature to a feature, and it is even possible to open it up to users. The parsing and semantics are worked out once, and apply to all uses of extensible syntax for all future features and subfeatures. You can have confidence that the feature or subfeature you are adding will not have syntax problems. (By the way, extensible syntax is a specific proposal for org that enables many different possible future features, not the general idea of extending syntax. Important not to be confused about that. If you want to add to link syntax, you are not doing extensible syntax. But you can use extensible syntax to implement /any type of link you want with any subfeatures you want including git features/. For example, I supplied an example that allows link coloring according to whether the link was visited recently. And I have been wanting another where you can have bidirectional links using Org-IDs so that you can move both ends of the link anywhere you want -- and automatic labels. All of this is feasible with a single syntax, so we don't have to pull our hair out over unintended consequences.) In the case of git links, we can add as many new git features as we want without breaking anything. The syntax can follow git's syntax without having to figure out how to translate it or delimit it or work out special cases. I have more notes on this but cannot supply them now. Some previous posts: http://www.mail-archive.com/emacs-orgmode@gnu.org/msg28464.html http://thread.gmane.org/gmane.emacs.orgmode/11896 http://thread.gmane.org/gmane.emacs.orgmode/10204/focus=10240 Perhaps this is something to consider. Samuel -- The Kafka Pandemic: http://thekafkapandemic.blogspot.com/2010/12/welcome-to-kafka-pandemic-two-forces_9182.html I support the Whittemore-Peterson Institute (WPI) === I want to see the original (pre-hold) Lo et al. 2010 NIH/FDA/Harvard MLV paper. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: org-git-link does not support locational information within file 2011-02-11 17:58 ` Samuel Wales @ 2011-02-11 18:05 ` Samuel Wales 2011-02-12 11:17 ` Bastien 1 sibling, 0 replies; 10+ messages in thread From: Samuel Wales @ 2011-02-11 18:05 UTC (permalink / raw) To: Bastien; +Cc: Gregor Kappler, emacs-orgmode For a concise and relevant post: http://www.mail-archive.com/emacs-orgmode@gnu.org/msg28464.html -- The Kafka Pandemic: http://thekafkapandemic.blogspot.com/2010/12/welcome-to-kafka-pandemic-two-forces_9182.html I support the Whittemore-Peterson Institute (WPI) === I want to see the original (pre-hold) Lo et al. 2010 NIH/FDA/Harvard MLV paper. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: org-git-link does not support locational information within file 2011-02-11 17:58 ` Samuel Wales 2011-02-11 18:05 ` Samuel Wales @ 2011-02-12 11:17 ` Bastien 2011-02-12 20:44 ` Samuel Wales 1 sibling, 1 reply; 10+ messages in thread From: Bastien @ 2011-02-12 11:17 UTC (permalink / raw) To: Samuel Wales; +Cc: Gregor Kappler, emacs-orgmode Hi Samuel, Samuel Wales <samologist@gmail.com> writes: > I think your reluctance to change the syntax is understandable. Then > again, I'm a proponent of simple syntax. That is one reason I like > Lisp. So do I. My other concern is backward compatibility, and burden any change about this may put on third-part tools (like the python parsers and so on.) >> org-git-link.el is quite readable, and I'd welcome ideas on how to >> extend it to fulfill your wishes without extending Org's link syntax >> too much... > > It can be done without extending Org's link syntax at all. How? I managed to hack something with git links looking like git:/file/::master{...}::textsearchstring When I say it doesn't stick to the simple stored link syntax, I mean it requires additional "::". Which is not a big deal _per se_, and maybe I'll end up implementing this. > I think questions of syntax are important. Over time, syntaxes get > complicated, and we need more features, but fear to add them. > Sometimes we end up stuck in the middle, with complicated regexps, not > always factored, not quite sure how it will export or whether it can > be nested or combined or what other syntaxes it will work with or how > search will find it, but also lacking a feature somebody wants. > Adding a feature can sometimes raise questions of how to quote or > escape literal strings that look exactly like the special syntax for > the feature. I wrote about this in a post called parsing risk with > greater care than I can apply here. > > For new features, I think it would be good to consider extensible > syntax, which is a specific, documented proposal for a universal > syntax in which you can add things without breaking other things. A > very small amount of code is necessary to add a new subfeature to a > feature, and it is even possible to open it up to users. The parsing > and semantics are worked out once, and apply to all uses of extensible > syntax for all future features and subfeatures. You can have > confidence that the feature or subfeature you are adding will not have > syntax problems. > > (By the way, extensible syntax is a specific proposal for org that > enables many different possible future features, not the general idea > of extending syntax. Important not to be confused about that. If you > want to add to link syntax, you are not doing extensible syntax. But > you can use extensible syntax to implement /any type of link you want > with any subfeatures you want including git features/. For example, I > supplied an example that allows link coloring according to whether the > link was visited recently. And I have been wanting another where you > can have bidirectional links using Org-IDs so that you can move both > ends of the link anywhere you want -- and automatic labels. All of > this is feasible with a single syntax, so we don't have to pull our > hair out over unintended consequences.) Nice thoughts, I share the spirit of it. > Some previous posts: > > http://www.mail-archive.com/emacs-orgmode@gnu.org/msg28464.html I've reread this. The proposed syntax is clean, but implementing this is certainly a daunting task, and discussing the theorical benefits of such a change is not high on my todo list right now... > Perhaps this is something to consider. It is -- there are enough brains here to let the discussion grow in a useful way, and this list is not a place where we close doors :) Thanks, -- Bastien ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: org-git-link does not support locational information within file 2011-02-12 11:17 ` Bastien @ 2011-02-12 20:44 ` Samuel Wales 0 siblings, 0 replies; 10+ messages in thread From: Samuel Wales @ 2011-02-12 20:44 UTC (permalink / raw) To: Bastien; +Cc: Gregor Kappler, emacs-orgmode I think it will always be much easier to add a little syntax here and there to existing syntaxes. To me, the question is whether it is worth it in the big picture, long-term perspective to keep adding small syntax extensions to existing syntax. Yes, we have great people on this list who might be able to do something with this. Thanks. Samuel -- The Kafka Pandemic: http://thekafkapandemic.blogspot.com/2010/12/welcome-to-kafka-pandemic-two-forces_9182.html I support the Whittemore-Peterson Institute (WPI) === I want to see the original (pre-hold) Lo et al. 2010 NIH/FDA/Harvard MLV paper. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: org-git-link does not support locational information within file 2011-02-11 17:17 ` Bastien 2011-02-11 17:58 ` Samuel Wales @ 2011-02-13 12:20 ` Achim Gratz 2011-02-15 20:11 ` Gregor Kappler 2 siblings, 0 replies; 10+ messages in thread From: Achim Gratz @ 2011-02-13 12:20 UTC (permalink / raw) To: emacs-orgmode Bastien <bastien.guerry@wikimedia.fr> writes: >> 2. use git versioned files transparently, i.e. org-git-store-link >> should support search (org-ids and text files) in linked git >> revisions of files. > > I've look into this. We could code things to add a search string: > > [[git:~/my.org::master@{2011-02-07}::Org code]] Just like org-protocol and org-annotate-helper this uses an opaque URI and positional arguments, something I'm not too fond of. It's easily broken and hard to extend in a backwards-compatible manner. If all uses of URI-like syntax were stratified to a single general form within orgmode, it would become a lot easier to move data back and forth using these URI, IMHO. Since the function is searching for something after the resource has been retrieved by the application that requested it, it should probably have URI fragment syntax, see RFC 2396 (this RFC actually replaces RFC1738 that org-protocol still references). Likewise the specification of what version to retrieve from Git should probably be in query syntax since it's done by the server of the request. Last but not least, the git scheme is already in use by git for specifying remotes, so I'd suggest not clobbering that namespace from within org. The use of "@" is reserved in certain places and use of braces is labeled "unwise". Hence something like: [[org://authority/git:/~/my.org?b=master;d=2011-02-07#Org%20code]] looks to be more friendly considering that maybe these links diffuse outside of org and are tried to be interpreted by URI parsers. It opens up a way to ask org servers for their data (when the authority segment is present, if not it uses the local data as implied by the org document containing the URI) and enables a uniform way to introduce sub-handlers (git:/ in this case). Org-protocol does some of that already and should be able to be extended to include the proposal above. The arguments are also named, so they can come in any order. Just a thought. [Note: emacsclient does only strip down consecutive slashes for what it considers the path to files. It's perfectly OK to give it a lisp expression that contains a string with as many slashes as you see fit, like this one. This might be a better way to get URI arguments to emacs server, then: emacsclient -e '(org-parse-URI "org:...")'] Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Factory and User Sound Singles for Waldorf Q+, Q and microQ: http://Synth.Stromeko.net/Downloads.html#WaldorfSounds ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: org-git-link does not support locational information within file 2011-02-11 17:17 ` Bastien 2011-02-11 17:58 ` Samuel Wales 2011-02-13 12:20 ` Achim Gratz @ 2011-02-15 20:11 ` Gregor Kappler 2 siblings, 0 replies; 10+ messages in thread From: Gregor Kappler @ 2011-02-15 20:11 UTC (permalink / raw) To: Bastien; +Cc: emacs-orgmode Hi Bastien, Thanks for your answer. I was surprised and glad to hear so much interest in my particular problem. On Fri, 11 Feb 2011 18:17:58 +0100, Bastien <bastien.guerry@wikimedia.fr> wrote: > > 2. use git versioned files transparently, i.e. org-git-store-link > > should support search (org-ids and text files) in linked git > > revisions of files. > > I've look into this. We could code things to add a search string: > > [[git:~/my.org::master@{2011-02-07}::Org code]] > ^^ > > ... but I'm reluctant to change the general syntax of links, even > if that's just for git links. It might be better to stick to org-mode's convention of storing the "location within the file" after "::", a convention your current syntax is not adhering to. I think you could stay consistent with the current general syntax of orgmode by switching from [[git:~/my.org::master@{2011-02-11}::Org code]] to [[git:~/my.org@master{2011-02-11}::Org code]] or [[git:~/my.org?master{2011-02-11}::Org code]] This would fully break existing links. Achim Gratz contributed some good points about changing the git-link syntax and made a more founded proposal for a changed syntax though. Achim seems to focus strongly on machine readability. For me, I like to be able to read links easily. [[git:<repository or file>?<revision information>::<location in file>]] <revision information> can be - a date+time value (for me, time is important here) - a SHA - "HEAD" > > > 3. define an interactive function that can update the revision > > information of a link at mark to the current branch head of the > > file (so I can update all links to new FS folder structure.) > > You mean update > > [[git:~/my.org::master@{2011-02-07}::Org code]] > > to > > [[git:~/my.org::master@{2011-02-11}::Org code]] > > ? > > Can you provide an explicit example? Let the function be of name org-git-link-update-to-head. I will adhere to the syntax in your post. I guess all scenarios can be made explicit by two conditions: 1. The file is still of the same name. Calling org-git-link-update-to-head on [[git:~/my.org::master@{2011-02-11}::Org code]] would change the link to [[git:~/my.org::master@{2011-02-15}::Org code]] (today being the 15th) 2. more interesting is the case that the file was moved by e.g by git mv my.org your.org Then optimally git would be queried for the actual location of a newer version in HEAD (if unique). (I am actually not sure how to do this with git, but should be viable) The link should be rewritten by org-git-link-update-to-head to [[git:~/your.org::master@{2011-02-15}::Org code]] This file might have been edited meanwhile by e.g. echo "* annoying tail heading" >> your.org && git add your.org && git commit -m "" Still the new link should become [[git:~/your.org::master@{2011-02-14}::Org code]] If HEAD would be added to the possible revision definition, org-git-link-update-to-head cannot identify the file after moving. On the other hand, having this function one would not want to point to head. Another possibility would be not to rewrite links but to resolve the current revision as outlined on the fly in org-open-at-point. > > I am still lame at elisp - so my implementation skills are > > limited. With the great work in org-git-link all backend stuff seems > > there, only needing more glue. Any hints how to achieve this would be > > very welcome! > > org-git-link.el is quite readable, and I'd welcome ideas on how to > extend it to fulfill your wishes without extending Org's link syntax > too much... I try to learn elisp bit by bit. Found a good tutorial finally. I got busy times around me - need to constrain fiddle-time. Cheers and thanks, Gregor -- -- Dr. Gregor Kappler Fakultät für Psychologie Institut für Entwicklungspsychologie und Psychologische Diagnostik http://www.univie.ac.at/Psychologie Universität Wien Liebiggasse 5 A-1010 Wien mail: gregor.kappler@univie.ac.at tel: +43 1 4277 47866 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: org-git-link does not support locational information within file 2011-02-03 15:04 org-git-link does not support locational information within file Gregor Kappler 2011-02-11 17:17 ` Bastien @ 2011-02-13 8:14 ` Leo Alekseyev 2011-02-15 20:15 ` Gregor Kappler 1 sibling, 1 reply; 10+ messages in thread From: Leo Alekseyev @ 2011-02-13 8:14 UTC (permalink / raw) To: Gregor Kappler; +Cc: emacs-orgmode > ** Shortcomings of git-link in current org HEAD > Yet, org-git-link currently is too greedy for my daily use: > 1. they kill org-links for org headings, if the org files are > versioned in a git repository (and all of mine are!) and > 2. they kill in-file-search information for versioned non-org files. The discussion so far focused on extending the link syntax to allow multiple pieces of "location" information (e.g. location within the repository + location within the file), which is a good idea. However, I think the bigger problem with org-git-link in its current incarnation is that it forces me to use git:// links for all files under version control, which is NOT what I want to do 90% of the time. I have a quick hack to deal with this -- namely, commenting out ;; (add-hook 'org-store-link-functions 'org-git-store-link t) and using a separate keybinding for storing git links using the following function: (defun org-git-store-link-interactively (arg) "Store git link to current file." (interactive "P") (let ((org-store-link-functions (cons 'org-git-store-link org-store-link-functions))) (call-interactively 'org-store-link arg) )) In addition, I'm not crazy about using the "branch@{date}" format for storing links by default, so I hacked something that uses SHA1 instead... I could post a patch if anyone is curious. --Leo ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: org-git-link does not support locational information within file 2011-02-13 8:14 ` Leo Alekseyev @ 2011-02-15 20:15 ` Gregor Kappler 0 siblings, 0 replies; 10+ messages in thread From: Gregor Kappler @ 2011-02-15 20:15 UTC (permalink / raw) To: Leo Alekseyev; +Cc: emacs-orgmode Hi Leo, > However, I think the bigger problem with org-git-link in its current > incarnation is that it forces me to use git:// links for all files > under version control, which is NOT what I want to do 90% of the time. > I have a quick hack to deal with this -- namely, commenting out > > ;; (add-hook 'org-store-link-functions 'org-git-store-link t) > > and using a separate keybinding for storing git links using the > following function: > > (defun org-git-store-link-interactively (arg) > "Store git link to current file." > (interactive "P") > (let ((org-store-link-functions (cons 'org-git-store-link > org-store-link-functions))) > (call-interactively 'org-store-link arg) > )) Thanks a lot for this! > > > In addition, I'm not crazy about using the "branch@{date}" format for > storing links by default, so I hacked something that uses SHA1 > instead... I could post a patch if anyone is curious. I would be interested, and I think SHA1 should be supported as it is so common with git. Cheers, Gregor -- -- Dr. Gregor Kappler Fakultät für Psychologie Institut für Entwicklungspsychologie und Psychologische Diagnostik http://www.univie.ac.at/Psychologie Universität Wien Liebiggasse 5 A-1010 Wien mail: gregor.kappler@univie.ac.at tel: +43 1 4277 47866 ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2011-02-15 20:14 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-02-03 15:04 org-git-link does not support locational information within file Gregor Kappler 2011-02-11 17:17 ` Bastien 2011-02-11 17:58 ` Samuel Wales 2011-02-11 18:05 ` Samuel Wales 2011-02-12 11:17 ` Bastien 2011-02-12 20:44 ` Samuel Wales 2011-02-13 12:20 ` Achim Gratz 2011-02-15 20:11 ` Gregor Kappler 2011-02-13 8:14 ` Leo Alekseyev 2011-02-15 20:15 ` Gregor Kappler
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).