* Org, Hyperbole, and eev @ 2022-06-26 15:56 Eduardo Ochs 2022-06-26 16:28 ` Robert Weiner 0 siblings, 1 reply; 33+ messages in thread From: Eduardo Ochs @ 2022-06-26 15:56 UTC (permalink / raw) To: Org Mode Hi all, this message is slightly off-topic, and a shameless plug... Eev can do many things that Org and Hyperbole and do, but it makes very little sense to people who can play the role of "users" well, in the sense of people who can "use" Emacs packages without looking at the elisp source and hacking it, i.e.: reading the source of the package, inspecting and understanding its data structures, and creating sexps that call the package's functions directly... Eev still has a couple of parts whose data structures are hard to inspect. I don't regard these parts as "real" bugs, but I do regard them as hugely embarassing - and I have just fixed one of them: `find-here-links', that is explained in this section of the main tutorial, http://angg.twu.net/eev-intros/find-eev-quick-intro.html#4.1 and in this other tutorial: http://angg.twu.net/eev-intros/find-here-links-intro.html The way to run `find-here-links' in debug mode is explained here, http://angg.twu.net/eev-current/eev-hlinks.el.html in the second part of the ";;; Commentary:" at the top - look for "Debug mode". As I mentioned in the other thread https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00524.html https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/threads.html#00524 and in these pages, http://angg.twu.net/2021-org-for-non-users.html http://angg.twu.net/find-elisp-intro.html http://angg.twu.net/eev-wconfig.html http://angg.twu.net/hyperbole.html I find Org and Hyperbole difficult mainly because they are hacker-unfriendly. It _may be_ that some of the people who said that they find Org very hard in this thread https://lists.gnu.org/archive/html/emacs-devel/2022-06/threads.html#00186 would also benefit from a bit more of hacker-friendliness... and so it would be great if more ideas could flow between Org, eev, and Hyperbole. Cheers and sorry the noise =P, Eduardo Ochs http://angg.twu.net/#eev ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-26 15:56 Org, Hyperbole, and eev Eduardo Ochs @ 2022-06-26 16:28 ` Robert Weiner 2022-06-26 17:51 ` Eduardo Ochs 0 siblings, 1 reply; 33+ messages in thread From: Robert Weiner @ 2022-06-26 16:28 UTC (permalink / raw) To: Eduardo Ochs; +Cc: Org Mode [-- Attachment #1: Type: text/plain, Size: 3218 bytes --] Hi Eduardo: I really think that you are confused in saying that Hyperbole and Org are hacker-unfriendly. Yes, they are targeted at users who don't have to understand the programming, but if you do understand Lisp programming well, the interactive features are available as Lisp functions in almost all cases, so you simply have to dive in, find the functions you want and utilize or change them. In fact, Hyperbole offers 'action implicit buttons' that utilize angle-bracket syntax to turn any Lisp function (or hyperbole button type call or variable reference) into a hyperbutton that runs the function with arguments or displays the variable, e.g. <find-file "~/.org/my-org-file.org ">. With Hyperbole, much of the behavior is factored into class-like libraries with the 'methods' alphabetized and separated into public and private groupings. Now some of this code is complex in order to handle many contexts and make things simple to the user but that is a matter of you understanding this complexity if you want to hack on it. I'm not sure what else you could ask for in packages. -- rsw On Sun, Jun 26, 2022 at 11:58 AM Eduardo Ochs <eduardoochs@gmail.com> wrote: > Hi all, > > this message is slightly off-topic, and a shameless plug... > > Eev can do many things that Org and Hyperbole and do, but it makes > very little sense to people who can play the role of "users" well, in > the sense of people who can "use" Emacs packages without looking at > the elisp source and hacking it, i.e.: reading the source of the > package, inspecting and understanding its data structures, and > creating sexps that call the package's functions directly... > > Eev still has a couple of parts whose data structures are hard to > inspect. I don't regard these parts as "real" bugs, but I do regard > them as hugely embarassing - and I have just fixed one of them: > `find-here-links', that is explained in this section of the main > tutorial, > > http://angg.twu.net/eev-intros/find-eev-quick-intro.html#4.1 > > and in this other tutorial: > > http://angg.twu.net/eev-intros/find-here-links-intro.html > > The way to run `find-here-links' in debug mode is explained here, > > http://angg.twu.net/eev-current/eev-hlinks.el.html > > in the second part of the ";;; Commentary:" at the top - look for > "Debug mode". > > As I mentioned in the other thread > > https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00524.html > > https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/threads.html#00524 > > and in these pages, > > http://angg.twu.net/2021-org-for-non-users.html > http://angg.twu.net/find-elisp-intro.html > http://angg.twu.net/eev-wconfig.html > http://angg.twu.net/hyperbole.html > > I find Org and Hyperbole difficult mainly because they are > hacker-unfriendly. It _may be_ that some of the people who said that > they find Org very hard in this thread > > > https://lists.gnu.org/archive/html/emacs-devel/2022-06/threads.html#00186 > > would also benefit from a bit more of hacker-friendliness... and so it > would be great if more ideas could flow between Org, eev, and Hyperbole. > > Cheers and sorry the noise =P, > Eduardo Ochs > http://angg.twu.net/#eev > > [-- Attachment #2: Type: text/html, Size: 5748 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-26 16:28 ` Robert Weiner @ 2022-06-26 17:51 ` Eduardo Ochs 2022-06-26 18:23 ` Robert Weiner 0 siblings, 1 reply; 33+ messages in thread From: Eduardo Ochs @ 2022-06-26 17:51 UTC (permalink / raw) To: Robert Weiner; +Cc: Org Mode On Sun, 26 Jun 2022 at 13:29, Robert Weiner <rsw@gnu.org> wrote: > Hi Eduardo: > > I really think that you are confused in saying that Hyperbole and Org are hacker-unfriendly. Yes, they are targeted at users who don't have to understand the programming, but if you do understand Lisp programming well, the interactive features are available as Lisp functions in almost all cases, so you simply have to dive in, find the functions you want and utilize or change them. > > In fact, Hyperbole offers 'action implicit buttons' that utilize angle-bracket syntax to turn any Lisp function (or hyperbole button type call or variable reference) into a hyperbutton that runs the function with arguments or displays the variable, e.g. <find-file "~/.org/my-org-file.org">. > > With Hyperbole, much of the behavior is factored into class-like libraries with the 'methods' alphabetized and separated into public and private groupings. Now some of this code is complex in order to handle many contexts and make things simple to the user but that is a matter of you understanding this complexity if you want to hack on it. > > I'm not sure what else you could ask for in packages. Hi Robert, let me see if I can find something useful to say... Most of the people that I know who became active users of eev were "beginner programmers" when they started using eev - by "beginner programmers" I mean that their mental buffers were still quite small, and they couldn't understand well functions that were more than a few lines long. I wanted to make eev more accessible to people like them, and I treated their feedback very seriously. One of the techniques that I used to make eev more accessible to them is described in this video, http://angg.twu.net/find-elisp-intro.html (find-1stclassvideo-links "2022findelispintro") (find-2022findelispintrovideo "14:36") from 14:36 onwards - "put several similar examples close to one another, starting by the most basic ones". I treated that technique as "obvious" for many years - I just used it in many places, and I thought that the users would notice that pattern, and start to use it in their own notes. That didn't work, and I saw that I had to spell out that technique explicitly, and repeat it often. When I asked you questions about how to create eev-style sexps that would behave as hyperbole-style buttons, in some of the e-mails that I point to here, http://angg.twu.net/hyperbole.html I was signaling that my mental buffers were almost full... at that point explanations in English helped me very little, and I was trying to write "several similar examples close to one another, starting by the most basic ones" to factor your code conceptually via tests. I _still_ think that your buttons and menus are hacker-unfriendly. The source code is available, yes, but I spent several evenings trying to understand them in my "non-user" way, and I got a mental buffer overflow instead of enlightenment... and I also spent many hours writing e-mails to the Hyperbole mailing list, but the answers left me very frustrated. Hope that helps, =/ Eduardo Ochs http://angg.twu.net/#eev ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-26 17:51 ` Eduardo Ochs @ 2022-06-26 18:23 ` Robert Weiner 2022-06-26 19:45 ` Eduardo Ochs 2022-09-27 14:16 ` Jean Louis 0 siblings, 2 replies; 33+ messages in thread From: Robert Weiner @ 2022-06-26 18:23 UTC (permalink / raw) To: Eduardo Ochs; +Cc: Org Mode [-- Attachment #1: Type: text/plain, Size: 6046 bytes --] Hi Eduardo: I do get this and see this is why you have not leveraged Hyperbole or Org for eev implementation. (I do feel eev has a number of interesting and useful ideas, and as I've said to you personally, I just hoped you could use Hyperbole or other existing Emacs infrastructure to avoid embedding so much code within eev). I took a brief look today at some of the code in the latest packaged release of eev from ELPA, as well as a bit at some of your email archives and video links. What I see is that you like things extraordinarily concrete and packages like Hyperbole and Org try to build up generalized abstractions that can be used in many contexts. When you try to break down how these abstractions work at the very low-level concrete mental model you like, you find them too complex and therefore have to set them aside. If you can't bend on that, then I think your choice is right, to just build large amounts of low-level code that meets your needs. I think the way you archive long lists of hyperlinks into videos for every few words spoken in the video speaks to this style. I see the utility but this is not a common style or need. It feels like we are offering a 'pour a glass of water' function and you are trying to understand the physics of the molecular movement within the water while it is pouring. Because you struggle to do so, you decide you can't use our functions/capabilities, which is fine if this is how your mind works, but really should not be a commentary upon the packages provided. You see each day new people are coming to these packages and figuring out not only how to use them but to extend them to meet their needs, either through new hyperbutton types or snippets of additional code. So they can be bent to people's wills but you have to be willing to deal with abstractions, not the equivalent of assembly language to do so. Maybe if you could pick a single eev function that you think could be implemented with Org and Hyperbole and pointed us to the documentation for that, then we could show you an equivalent one using these packages and begin to give you a better sense of how you would go about leveraging what has been built. You document everything in detail, so this should be pretty simple. From my perspective, I do really like your idea of replayable notebooks for training and interaction purposes. And you have certainly made that easy to use via eev. But your implementation could use much better organization and abstraction which would likely greatly reduce the code size as well. You should separate out computation of what you want to display from how and where you will display it as one technique. -- rsw On Sun, Jun 26, 2022 at 1:52 PM Eduardo Ochs <eduardoochs@gmail.com> wrote: > On Sun, 26 Jun 2022 at 13:29, Robert Weiner <rsw@gnu.org> wrote: > > Hi Eduardo: > > > > I really think that you are confused in saying that Hyperbole and Org > are hacker-unfriendly. Yes, they are targeted at users who don't have to > understand the programming, but if you do understand Lisp programming well, > the interactive features are available as Lisp functions in almost all > cases, so you simply have to dive in, find the functions you want and > utilize or change them. > > > > In fact, Hyperbole offers 'action implicit buttons' that utilize > angle-bracket syntax to turn any Lisp function (or hyperbole button type > call or variable reference) into a hyperbutton that runs the function with > arguments or displays the variable, e.g. <find-file "~/.org/ > my-org-file.org">. > > > > With Hyperbole, much of the behavior is factored into class-like > libraries with the 'methods' alphabetized and separated into public and > private groupings. Now some of this code is complex in order to handle > many contexts and make things simple to the user but that is a matter of > you understanding this complexity if you want to hack on it. > > > > I'm not sure what else you could ask for in packages. > > > Hi Robert, > > let me see if I can find something useful to say... > > Most of the people that I know who became active users of eev were > "beginner programmers" when they started using eev - by "beginner > programmers" I mean that their mental buffers were still quite small, > and they couldn't understand well functions that were more than a few > lines long. I wanted to make eev more accessible to people like them, > and I treated their feedback very seriously. > > One of the techniques that I used to make eev more accessible to them > is described in this video, > > http://angg.twu.net/find-elisp-intro.html > (find-1stclassvideo-links "2022findelispintro") > (find-2022findelispintrovideo "14:36") > > from 14:36 onwards - "put several similar examples close to one > another, starting by the most basic ones". > > I treated that technique as "obvious" for many years - I just used it > in many places, and I thought that the users would notice that > pattern, and start to use it in their own notes. That didn't work, and > I saw that I had to spell out that technique explicitly, and repeat it > often. > > When I asked you questions about how to create eev-style sexps that > would behave as hyperbole-style buttons, in some of the e-mails that I > point to here, > > http://angg.twu.net/hyperbole.html > > I was signaling that my mental buffers were almost full... at that > point explanations in English helped me very little, and I was trying > to write "several similar examples close to one another, starting by > the most basic ones" to factor your code conceptually via tests. > > I _still_ think that your buttons and menus are hacker-unfriendly. The > source code is available, yes, but I spent several evenings trying to > understand them in my "non-user" way, and I got a mental buffer > overflow instead of enlightenment... and I also spent many hours > writing e-mails to the Hyperbole mailing list, but the answers left me > very frustrated. > > Hope that helps, =/ > Eduardo Ochs > http://angg.twu.net/#eev > [-- Attachment #2: Type: text/html, Size: 8027 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-26 18:23 ` Robert Weiner @ 2022-06-26 19:45 ` Eduardo Ochs 2022-06-26 20:23 ` Robert Weiner 2022-09-27 14:16 ` Jean Louis 1 sibling, 1 reply; 33+ messages in thread From: Eduardo Ochs @ 2022-06-26 19:45 UTC (permalink / raw) To: Robert Weiner; +Cc: Org Mode On Sun, 26 Jun 2022 at 15:23, Robert Weiner <rsw@gnu.org> wrote: > > Maybe if you could pick a single eev function that you think could > be implemented with Org and Hyperbole and pointed us to the > documentation for that, then we could show you an equivalent one > using these packages and begin to give you a better sense of how you > would go about leveraging what has been built. You document > everything in detail, so this should be pretty simple. I am not sure if I understood your proposal correctly, but let me propose three tasks that would be pretty natural in eev-land... In all cases below "explain" means "explain step by step, with links to the source code and to the docs, and with sexps that inspect the data structures". 1) explain what happens when we type M-RET on this button: "subr.el" 2) explain what happens when we type: C-h h d d 3) suppose that we have a function that plays a local copy of your video "GNU Hyperbole - Overview and Demo". Let's use this fake function instead of a real one: ;; Test: (fake-play-oand "2:34") ;; (defun fake-play-oand (time &rest comments) (move-beginning-of-line 2) (insert (format "[Play Overview and Demo from: %s]\n" time))) Explain how you would implement buttons - choose your favorite syntax for them - that play "GNU Hyperbole - Overview and Demo" starting from a given timemark. Is that a good starting point? Note the unusual meaning for "explain"... how would you use Hyperbole to prepare these "explanations"? > From my perspective, I do really like your idea of replayable > notebooks for training and interaction purposes. And you have > certainly made that easy to use via eev. But your implementation > could use much better organization and abstraction which would > likely greatly reduce the code size as well. You should separate out > computation of what you want to display from how and where you will > display it as one technique. I'm very interested in seeing your suggestions! Can you be more concrete? [[]], Eduardo Ochs http://angg.twu.net/#eev ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-26 19:45 ` Eduardo Ochs @ 2022-06-26 20:23 ` Robert Weiner 2022-06-26 23:25 ` Eduardo Ochs 2022-06-27 0:49 ` Robert Weiner 0 siblings, 2 replies; 33+ messages in thread From: Robert Weiner @ 2022-06-26 20:23 UTC (permalink / raw) To: Eduardo Ochs; +Cc: Org Mode [-- Attachment #1: Type: text/plain, Size: 3434 bytes --] That was not the offer. The offer was to show you how to implement a discrete eev command using another framework, possibly simplifying its implementation. Hopefully, from seeing the code used to do this, you could dig in yourself and follow the flow to whatever level you like. Hyperbole, for example, has been implemented across years of part-time work. Of course, it has complexities in its implementation and if the non-abstract parts of that interest you, then use edebug or trace commands to explore the code flow but I wouldn't expect anyone to write that out for you. #3 is closer to the offer. If you want to see a Hyperbole function or button type equivalent, I can show you that, i.e. you load Hyperbole and then you use Hyperbole or eev syntax to jump to a point in a video that is done through a Hyperbole implementation. But I can't explain the Hyperbole dispatching mechanisms except at a high level. hkey-alist in Hyperbole is not hard to understand. The prioritized list of implicit buttons types in Hyperbole is not that hard to understand. That kind of level I can discuss. -- rsw -- rsw On Sun, Jun 26, 2022 at 3:45 PM Eduardo Ochs <eduardoochs@gmail.com> wrote: > On Sun, 26 Jun 2022 at 15:23, Robert Weiner <rsw@gnu.org> wrote: > > > > Maybe if you could pick a single eev function that you think could > > be implemented with Org and Hyperbole and pointed us to the > > documentation for that, then we could show you an equivalent one > > using these packages and begin to give you a better sense of how you > > would go about leveraging what has been built. You document > > everything in detail, so this should be pretty simple. > > I am not sure if I understood your proposal correctly, but let me > propose three tasks that would be pretty natural in eev-land... In all > cases below "explain" means "explain step by step, with links to the > source code and to the docs, and with sexps that inspect the data > structures". > > 1) explain what happens when we type M-RET on this button: > > "subr.el" > > 2) explain what happens when we type: > > C-h h d d > > 3) suppose that we have a function that plays a local copy of your > video "GNU Hyperbole - Overview and Demo". Let's use this fake > function instead of a real one: > > ;; Test: (fake-play-oand "2:34") > ;; > (defun fake-play-oand (time &rest comments) > (move-beginning-of-line 2) > (insert (format "[Play Overview and Demo from: %s]\n" time))) > > Explain how you would implement buttons - choose your favorite > syntax for them - that play "GNU Hyperbole - Overview and Demo" > starting from a given timemark. > > Is that a good starting point? Note the unusual meaning for > "explain"... how would you use Hyperbole to prepare these > "explanations"? > > > From my perspective, I do really like your idea of replayable > > notebooks for training and interaction purposes. And you have > > certainly made that easy to use via eev. But your implementation > > could use much better organization and abstraction which would > > likely greatly reduce the code size as well. You should separate out > > computation of what you want to display from how and where you will > > display it as one technique. > > I'm very interested in seeing your suggestions! Can you be more > concrete? > > [[]], > Eduardo Ochs > http://angg.twu.net/#eev > [-- Attachment #2: Type: text/html, Size: 4748 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-26 20:23 ` Robert Weiner @ 2022-06-26 23:25 ` Eduardo Ochs 2022-06-27 0:49 ` Robert Weiner 1 sibling, 0 replies; 33+ messages in thread From: Eduardo Ochs @ 2022-06-26 23:25 UTC (permalink / raw) To: Robert Weiner; +Cc: Org Mode On Sun, 26 Jun 2022 at 17:24, Robert Weiner <rsw@gnu.org> wrote: > > That was not the offer. The offer was to show you how to implement a > discrete eev command using another framework, possibly simplifying > its implementation. Hopefully, from seeing the code used to do this, > you could dig in yourself and follow the flow to whatever level you > like. Hyperbole, for example, has been implemented across years of > part-time work. Of course, it has complexities in its implementation > and if the non-abstract parts of that interest you, then use edebug > or trace commands to explore the code flow but I wouldn't expect > anyone to write that out for you. Hi Robert, That's bad news. In the last years I became a specialist on helping people with the "non-abstract parts", usually via chat... we discuss until we find together what are the parts that are not clear to them, them we write tests that show how those parts work, and then we go back to the high-level functions. In eev the two sexp hyperlinks below (find-efunction 'hkey-initialize) (find-efunction 'hkey-initialize "Bind the Action Key to {M-RET}") point to the source code of `hkey-initialize', but the second one is a "refinement" of the first one in this sense: (find-refining-intro) http://angg.twu.net/eev-intros/find-refining-intro.html I often use sequences of sexp hyperlinks, with and without refinements, to record an "explanation" of how something is done. For example, this block (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-8.0.0/") (find-hyperbolefile "DEMO") (find-hyperbolefile "DEMO" "Action Key is {M-RET}") (find-hyperbolegrep "grep -nH --null -e M-RET *") (find-efunction 'hkey-initialize) (find-efunction 'hkey-initialize "Bind the Action Key to {M-RET}") (find-ekeymapdescr hyperbole-mode-map) (find-ekeymapdescr hyperbole-mode-map "M-RET") (find-ekeymapdescr hyperbole-mode-map "M-RET" "hkey-either") (find-efunction 'hkey-either) (find-efunction 'assist-key) (find-efunction 'assist-key-internal) (find-efunction 'action-key) (find-efunction 'action-key-internal) (find-efunction 'hkey-execute) (find-efunction 'hkey-execute "hkey-alist") (find-evardescr 'hkey-alist) (find-eppp hkey-alist) (find-evariable 'hkey-alist) (find-evariable 'hkey-alist "If on a Hyperbole button") (find-efunction 'hbut:at-p) (find-efunction 'hbut:at-p "ebut:at-p") (find-efunction 'hbut:at-p "ibut:at-p") (find-efunction 'ebut:at-p) (find-efunction 'ebut:get) (find-efunction 'ibut:at-p) is an attempt to understand how M-RET treats hkey-alist as a kind of program to be run... How would you rewrite the sexps above as Hyperbole buttons? I downloaded a local copy of (find-hyperbolefile "FAST-DEMO") (find-hyperbolefile "FAST-DEMO" "GNU Hyperbole Videos") (find-hyperbolefile "FAST-DEMO" "Overview and Demo") (find-hyperbolefile "FAST-DEMO" "https://youtu.be/WKwZHSbHmPg") with (find-youtubedl-links nil nil "WKwZHSbHmPg" nil "hoandd") Docs: (find-efunction 'find-youtubedl-links) and I found - via the transcript - (find-yttranscript-links "hoandd" "WKwZHSbHmPg") Docs: (find-efunction 'find-yttranscript-links) that starting on 5:14 (find-hypoanddvideo "05:14" "and so it's very easy to create these") (find-hypoanddvideo "05:17" "live") (find-hypoanddvideo "05:18" "uh interactive tutorials if you want") you say that you can use Hyperbole buttons to create interactive tutorials... I do that with eev all the time, but my "buttons" are sexps. Imagine for a moment that a group of, say, 42 Emacs users asks you to prepare a video tutorial on how exactly hkey-alist works, because they want to create their own extensions - button types? - and they think that it would be nice, and useful to the world, etc, etc, if you could record a video explaining that... would you still answer something like this, "then use edebug or trace commands to explore the code flow but I wouldn't expect anyone to write that out for you" or would you use Hyperbole to create an interactive tutorial explaining the details, and record a video demo-ing it? [[]] =/, Eduardo Ochs http://angg.twu.net/#eev ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-26 20:23 ` Robert Weiner 2022-06-26 23:25 ` Eduardo Ochs @ 2022-06-27 0:49 ` Robert Weiner 2022-06-27 3:48 ` Eduardo Ochs ` (2 more replies) 1 sibling, 3 replies; 33+ messages in thread From: Robert Weiner @ 2022-06-27 0:49 UTC (permalink / raw) To: Eduardo Ochs; +Cc: Org Mode [-- Attachment #1: Type: text/plain, Size: 6558 bytes --] So here is a simple implementation that is not unlike your own though the functions are a bit simpler and more clearly documented without a listing of every possible test case type and requires neither Hyperbole nor Org until you want to activate things as buttons: (require 'browse-url) (defun youtube-normalize-link (video-link) "Return a URL to a youtube video. ViDEO-LINK must be a string and can be a video identifier, e.g. WkwZHSbHmPg, or a full URL to the video." (if (or (string-prefix-p "https://" video-link) (string-prefix-p "www." video-link)) video-link (concat "https://www.youtube.com/watch?v=" video-link))) (defun youtube-normalize-time (time-string) "Given a colon-separated TIME-STRING, with optional hours and minutes, e.g. 1:2:44 (1 hour, two minutes, 45 seconds into a video), return the normalized time for a Youtube url. If the TIME-STRING format is invalid, return nil." (if (string-match-p ":" time-string) (let* ((time-parts (split-string time-string ":")) (num-of-parts (length time-parts))) (cond ((zerop num-of-parts) "0s") ((= num-of-parts 1) (concat (nth 0 time-parts) "s")) ((= num-of-parts 2) (format "%sm%ss" (nth 0 time-parts) (nth 1 time-parts))) ((= num-of-parts 3) (format "%sh%sm%ss" (nth 0 time-parts) (nth 1 time-parts) (nth 2 time-parts))))) time-string)) (defun youtube-url-from-time (video-link time-string) "Given a VIDEO-LINK and a colon-separated TIME-STRING, e.g. 2:44 (two minutes, 45 seconds into the video), return the url to play from that point in the video. Return nil if TIME-STRING is invalid." (when (setq time-string (youtube-normalize-time time-string)) (format "%s&t=%s" (youtube-normalize-link video-link) time-string))) (defun youtube-play-from-time (video-link time-string) "Given a VIDEO-LINK and a colon-separated TIME-STRING, e.g. 2:44 (two minutes, 45 seconds), play the video from that point." (browse-url (youtube-url-from-time video-link time-string))) ;;;;;;;;;;;;;;;;;; Then once you load the Hyperbole package, in any buffer you could use any of the 3 buttons below which all do the same thing when pressed upon with the Action Key, {M-RET}: <youtube-play-from-time "WKwZHSbHmPg" "2:44"> <youtube-play-from-time "www.youtube.com/watch?v=WKwZHSbHmPg" "2:44"> <youtube-play-from-time "https://www.youtube.com/watch?v=WKwZHSbHmPg" "2:44"> If you added these functions to eev, I think you would simply change the <> to (): (youtube-play-from-time "WKwZHSbHmPg" "2:44") ;;;;;;;;;;;;;;;;;;;;;;;; I avoided creating implicit button and action types for this example to show you that they are not needed as you don't like specialized syntax anyway and want everything to be explicit, but in Hyperbole, we would probably create an implicit button type that recognized strings like "yt:WKwZHSbHmPg@2:44" and invoked the calls shown above. ;;;;;;;;;;;;;;;;;;;;;;;; For comparison, below is your eev code for the same purpose. You can see that it has extra arguments for little reason, uses eval where not necessary, and makes the URL assembly more complicated than needed. The differences are not major but my point is this adds up both in amounts of code and amounts of maintenance needed that you could reduce leveraging existing capabilities, like Hyperbole's ability to turn arbitrary functions into hyperbuttons. ;;; _ _ _ _ ;;; _ _ ___ _ _| |_ _ _| |__ ___ __ _(_) __| | ___ ___ ;;; | | | |/ _ \| | | | __| | | | '_ \ / _ \____\ \ / / |/ _` |/ _ \/ _ \ ;;; | |_| | (_) | |_| | |_| |_| | |_) | __/_____\ V /| | (_| | __/ (_) | ;;; \__, |\___/ \__,_|\__|\__,_|_.__/ \___| \_/ |_|\__,_|\___|\___/ ;;; |___/ ;; ;; «find-youtube-video» (to ".find-youtube-video") ;; Play a video on youtube using a browser. ;; Tests: (ee-find-youtube-url "xQqWufQgzVY" nil) ;; (ee-find-youtube-url "xQqWufQgzVY" "1:23") ;; (ee-find-youtube-video "xQqWufQgzVY") ;; (ee-find-youtube-video "xQqWufQgzVY" "1:23") ;; (ee-find-youtube-video "xQqWufQgzVY" "1:23" "Bla") ;; (find-youtube-video "xQqWufQgzVY" "1:23") ;; (ee-find-youtube-video "FoAzpGzFCSE" "15:14" "nice") ;; (find-youtube-video "FoAzpGzFCSE" "15:14" "nice") ;; (defvar ee-find-youtube-video-program 'find-googlechrome) (defun find-youtube-video (youtubeid &optional time &rest rest) (eval (ee-find-youtube-video youtubeid time))) (defun ee-find-youtube-video (youtubeid &optional time &rest rest) (list ee-find-youtube-video-program (ee-find-youtube-url youtubeid time))) (defun ee-find-youtube-url (youtubeid time) (format "http://www.youtube.com/watch?v=%s%s" youtubeid (or (ee-time-to-youtube-time (or time "")) ""))) ;; «youtube-time» (to ".youtube-time") ;; Tests: (ee-time-to-youtube-time "") ;; (ee-time-to-youtube-time "!") ;; (ee-time-to-youtube-time "2") ;; (ee-time-to-youtube-time "23") ;; (ee-time-to-youtube-time "123") ;; (ee-time-to-youtube-time "1:23") ;; (ee-time-to-youtube-time "1:23:43") ;; (ee-time-to-youtube-time "1:23:43" "&") ;; (ee-time-to-youtube-time "" "&") ;; (defun ee-time-to-youtube-time (str &optional c) "Convert strings like \"1:23\" to strings like \"#t=1m23s\". Supports the input formats \"ss\", \"mm:ss\", and \"hh:mm:ss\". If the input does not match any of these formats, return nil. When C is non nil then use it as the prefix character. The default is \"#\", but in some situations we need \"&\" instead." (setq c (or c "#")) (save-match-data (cond ((string-match "^\\([0-9]+\\)$" str) (format "%st=%ss" c (match-string 1 str))) ((string-match "^\\([0-9]+\\):\\([0-9][0-9]\\)$" str) (format "%st=%sm%ss" c (match-string 1 str) (match-string 2 str))) ((string-match "^\\([0-9]+\\):\\([0-9][0-9]\\):\\([0-9][0-9]\\)$" str) (format "%st=%sh%sm%ss" c (match-string 1 str) (match-string 2 str) (match-string 3 str)))))) ;; Tests: (ee-time-to-arg "") ;; (ee-time-to-arg nil) ;; (ee-time-to-arg "{time}") ;; (ee-time-to-arg "1:23") ;; See: (find-efunction 'ee-time-to-youtube-time) ;; (defun ee-time-to-arg (time) (setq time (or time "")) (if (ee-time-to-youtube-time time) (format " \"%s\"" time) "")) [-- Attachment #2: Type: text/html, Size: 10000 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-27 0:49 ` Robert Weiner @ 2022-06-27 3:48 ` Eduardo Ochs 2022-06-27 4:11 ` Robert Weiner 2022-06-28 4:48 ` Eduardo Ochs 2022-09-27 14:43 ` Jean Louis 2 siblings, 1 reply; 33+ messages in thread From: Eduardo Ochs @ 2022-06-27 3:48 UTC (permalink / raw) To: Robert Weiner; +Cc: Org Mode On Sun, 26 Jun 2022 at 21:50, Robert Weiner <rsw@gnu.org> wrote: > > So here is a simple implementation (...) Hi Robert, thanks - but most functions of eev that deal with youtube URLs are clearly marked either as "this is part of a 5-minute hack" or as "this is part of an ex-5-minute hack that grew too much", so people are encouraged to rewrite them... What are the functions of Hyperbole that handle sexp buttons in the <...> syntax? Are they called by an "ebut:..." function, by an "ibut:..." function, or what? Do you remember the names of the lower-level functions that run <...> buttons? [[]], Eduardo Ochs http://angg.twu.net/#eev ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-27 3:48 ` Eduardo Ochs @ 2022-06-27 4:11 ` Robert Weiner 2022-06-28 4:43 ` Eduardo Ochs 0 siblings, 1 reply; 33+ messages in thread From: Robert Weiner @ 2022-06-27 4:11 UTC (permalink / raw) To: Eduardo Ochs, emacs-org list These are Action buttons run by the action button type defined via the defib macro in the “hibtypes.el” file. Just search for ‘defib action’ in there. You can invoke its implicit button type function from Lisp as (ibtypes::action) if I recall. -- Bob > On Jun 26, 2022, at 11:48 PM, Eduardo Ochs <eduardoochs@gmail.com> wrote: > > On Sun, 26 Jun 2022 at 21:50, Robert Weiner <rsw@gnu.org> wrote: >> >> So here is a simple implementation (...) > > Hi Robert, > > thanks - but most functions of eev that deal with youtube URLs are > clearly marked either as "this is part of a 5-minute hack" or as "this > is part of an ex-5-minute hack that grew too much", so people are > encouraged to rewrite them... > > What are the functions of Hyperbole that handle sexp buttons in the > <...> syntax? Are they called by an "ebut:..." function, by an > "ibut:..." function, or what? Do you remember the names of the > lower-level functions that run <...> buttons? > > [[]], > Eduardo Ochs > http://angg.twu.net/#eev ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-27 4:11 ` Robert Weiner @ 2022-06-28 4:43 ` Eduardo Ochs 2022-09-27 15:10 ` Jean Louis 0 siblings, 1 reply; 33+ messages in thread From: Eduardo Ochs @ 2022-06-28 4:43 UTC (permalink / raw) To: Robert Weiner; +Cc: emacs-org list On Mon, 27 Jun 2022 at 01:11, Robert Weiner <rswgnu@gmail.com> wrote: > > These are Action buttons run by the action button type defined via > the defib macro in the “hibtypes.el” file. Just search for ‘defib > action’ in there. You can invoke its implicit button type function > from Lisp as (ibtypes::action) if I recall. Hi Robert and other people, I was finally able to understand a significant part of what happens when we type M-RET on an action button like <insert "foo"> with hyperbole-mode active... my notes are here - for the sake of completeness; I don't expect them to be readable - (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-8.0.0/") (require 'hyperbole) (hyperbole-mode 0) (find-hyperbolefile "DEMO") (find-hyperbolefile "DEMO" "Action Key is {M-RET}") (find-hyperbolegrep "grep -nH --null -e M-RET *") (find-efunction 'hkey-initialize) (find-efunction 'hkey-initialize "Bind the Action Key to {M-RET}") (find-ekeymapdescr hyperbole-mode-map) (find-ekeymapdescr hyperbole-mode-map "M-RET") (find-ekeymapdescr hyperbole-mode-map "M-RET" "hkey-either") (find-efunction 'hkey-either) (find-efunction 'assist-key) (find-efunction 'assist-key-internal) (find-efunction 'action-key) (find-efunction 'action-key-internal) (find-efunction 'hkey-execute) (find-efunction 'hkey-execute "hkey-alist") (find-evardescr 'hkey-alist) (find-eppp hkey-alist) (find-eppp hkey-alist "(hbut:at-p)") (find-evariable 'hkey-alist) (find-evariable 'hkey-alist "If on a Hyperbole button") (find-evariable 'hkey-alist "If on a Hyperbole button" "(hbut:at-p)") (find-efunction 'hbut:at-p) (find-efunction 'hbut:at-p "ebut:at-p") (find-efunction 'hbut:at-p "ibut:at-p") (find-efunction 'ebut:at-p) (find-efunction 'ebut:get) (find-efunction 'ibut:at-p) https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00765.html ^ mentions ibtypes::action and defib action (find-efunction 'defib) (find-hyperbolegrep "grep --color=auto -nH --null -e defib *.el") (find-hyperbolegrep "grep -a -nH --null -e defib hibtypes.el") (find-hyperbolefile "hibtypes.el" "(defib action") (progn (find-hyperbolefile "hibtypes.el" "(defib action") (end-of-defun) (setq ee-defib-defun (ee-last-sexp)) ) (find-estring ee-defib-defun) (find-epp (read ee-defib-defun)) (find-eppm (read ee-defib-defun)) (find-efunction 'htype:create) (find-efunction 'htype:symbol) (htype:symbol 'action 'ibtypes) (find-efunction 'ibtypes::action) (find-efunctionpp 'ibtypes::action) (load "hibtypes.elc") (load "hibtypes.el") (find-efunctionpp 'ibtypes::action) (hyperbole-mode 1) (debug-on-entry 'ibtypes::action) (eek "2*<down> C-e <left>") (eek "<down> C-e <left> M-RET") <insert "foo"> (hyperbole-mode 0) (find-efunction 'ibut:at-p) (find-efunction 'ibut:at-p "(funcall itype)") (find-eppp (htype:category 'ibtypes)) (find-hyperbolegrep "grep -a -nH --null -e defib hibtypes.el") (find-efunction 'symtable:add) (find-evardescr 'symtable:ibtypes) (find-evariable 'symtable:ibtypes) I still don't understand well the code of ibut:at-p between the beginning and the point in which it calls (funcall itype), and I also don't understand well the code of ibtypes::action... Anyway, we are clearly using different notions of simplicity - see: https://lists.gnu.org/archive/html/hyperbole-users/2020-09/msg00013.html and I find it enviable that you can have that kind of complexity under the hood and still have lots of users that agree that Hyperbole is "simple"... Most people find eev very weird, and I have the impression that I wouldn't have half of my (few) users if I had code like that in eev. If the people who like to look under the hood try to understand how M-e in eev works they will end up trying to understand how (forward-sexp -1) works, and then they will read the comments of scan-sexps in syntax.c... syntax.c is impeccably well-written, and they will probably feel that their time was very well spent, and that their curiosity has lead them to very good places. =\ Exhausted cheers, Eduardo Ochs http://angg.twu.net/#eev ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-28 4:43 ` Eduardo Ochs @ 2022-09-27 15:10 ` Jean Louis 2022-09-27 16:22 ` Eduardo Ochs 0 siblings, 1 reply; 33+ messages in thread From: Jean Louis @ 2022-09-27 15:10 UTC (permalink / raw) To: Eduardo Ochs; +Cc: Robert Weiner, emacs-org list * Eduardo Ochs <eduardoochs@gmail.com> [2022-06-28 09:54]: > with hyperbole-mode active... my notes are here - for the sake of > completeness; I don't expect them to be readable - > > (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-8.0.0/") > (require 'hyperbole) > (hyperbole-mode 0) > (find-hyperbolefile "DEMO") > (find-hyperbolefile "DEMO" "Action Key is {M-RET}") I like that link above. Though I would like to see it a "Action Key is {M-RET}" so is there a way or some general font lock package that can make links similar like in Org mode but for all kinds of links, so that links is hidden and name shown? I would need that. This is great link: (find-hyperbolefile "DEMO" "Action Key is {M-RET}") But would not be better to have something like: "Hyperbole's __action key is M-RET__ so try it out" without the actual link there? I tend towards interpolation, so that links like ⟦ (link 123) ⟧ are just numbers, but shown as their names as the number is related to name in the database. Do you have way to go for something like that? > (find-efunction 'action-key-internal) > (find-efunction 'hkey-execute) > (find-efunction 'hkey-execute "hkey-alist") > (find-evardescr 'hkey-alist) The way how you have listed it above is insightful. I get the instructions and I get the point. It is way of teaching. It can be done by any means, Org, eev, Hyperbole. Though one so important part is missing, the presentation of links. It is cryptic. Instead of: > (find-evardescr 'hkey-alist) I would like to see visually: "Description of Emacs Lisp function `hkey-alist'" What is really good is accessibility, I can click M-e or M-k to go back, great. That is power. Similarly in Hyperbole, it is M-RET. > (find-eppp hkey-alist) > (find-eppp hkey-alist "(hbut:at-p)") > (find-evariable 'hkey-alist) > (find-evariable 'hkey-alist "If on a Hyperbole button") > (find-evariable 'hkey-alist "If on a Hyperbole button" "(hbut:at-p)") > (find-efunction 'hbut:at-p) There must be some way of quickly generating above links, do you have such? Let us say you are in buffer A, you go to Emacs Lisp file at line 134, and you just press there a key, and link is inserted in buffer A, leading to Emacs Lisp file at line 134, you have that? > (eek "2*<down> C-e <left>") > (eek "<down> C-e <left> M-RET") > <insert "foo"> Now you got it. I was following 90% > Anyway, we are clearly using different notions of simplicity - see: > > https://lists.gnu.org/archive/html/hyperbole-users/2020-09/msg00013.html > > and I find it enviable that you can have that kind of complexity under > the hood and still have lots of users that agree that Hyperbole is > "simple"... It is because users do not care what is under the hood... But now we have various information management systems, and I would like to get general Org-like presentation for any kind of links. Does such package exist already? Do we really need to make it new for each package? -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-27 15:10 ` Jean Louis @ 2022-09-27 16:22 ` Eduardo Ochs 2022-09-27 21:16 ` Jean Louis 0 siblings, 1 reply; 33+ messages in thread From: Eduardo Ochs @ 2022-09-27 16:22 UTC (permalink / raw) To: Eduardo Ochs, Robert Weiner, emacs-org list On Tue, 27 Sept 2022 at 12:11, Jean Louis <bugs@gnu.support> wrote: > (...) Hi Jean Louis, > Instead of: > > > (find-evardescr 'hkey-alist) > > I would like to see visually: > > "Description of Emacs Lisp function `hkey-alist'" In cases like that there would be some key sequence that parses the text and the text properties around point and produces a sexp that goes to the target of the link when executed. Let me call that sexp the "back-end" of the link. I did play with some ways to buttonize back-end sexps, and with some ways to parse the text around point to generate these back-end sexps, but I didn't find those things much fun, and in all the cases I ended up finding nice ways to solve my problems with just explicit sexps, without hiding them behind a title. So I postponed the problem behind your question - and I will deal with it again when someone who wants "back-end sexps hidden behind titles" asks me for help, or asks me to work together on their ideas. > There must be some way of quickly generating above links, do you have > such? > > Let us say you are in buffer A, you go to Emacs Lisp file at line 134, and > you just press there a key, and link is inserted in buffer A, leading > to Emacs Lisp file at line 134, you have that? Yes, and I am working in a way to do that that requires fewer keys. I submitted it to the EmacsConf2022: http://angg.twu.net/emacsconf2022-kla.html and I am asking my friends to test it. I haven't made commented screenshots for it - like these ones: http://angg.twu.net/eepitch.html#test-blocks yet, so right now the best way to understand how it works is to try the "Try:"s in the sections 1 and 8 of its docs: http://angg.twu.net/eev-current/eev-kla.el.html#intro Cheers, Eduardo Ochs http://angg.twu.net/#eev ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-27 16:22 ` Eduardo Ochs @ 2022-09-27 21:16 ` Jean Louis 2022-09-27 21:58 ` Jean Louis 2022-09-28 3:52 ` Ihor Radchenko 0 siblings, 2 replies; 33+ messages in thread From: Jean Louis @ 2022-09-27 21:16 UTC (permalink / raw) To: Eduardo Ochs; +Cc: Robert Weiner, emacs-org list [-- Attachment #1: Type: text/plain, Size: 2827 bytes --] * Eduardo Ochs <eduardoochs@gmail.com> [2022-09-27 20:22]: > On Tue, 27 Sept 2022 at 12:11, Jean Louis <bugs@gnu.support> wrote: > > (...) > > Hi Jean Louis, > > > Instead of: > > > > > (find-evardescr 'hkey-alist) > > > > I would like to see visually: > > > > "Description of Emacs Lisp function `hkey-alist'" > > In cases like that there would be some key sequence that parses the > text and the text properties around point and produces a sexp that > goes to the target of the link when executed. Let me call that sexp > the "back-end" of the link. I was thinking only the display would be different while link would be hidden. Just like Org links. > I did play with some ways to buttonize back-end sexps, and with some > ways to parse the text around point to generate these back-end sexps, > but I didn't find those things much fun, and in all the cases I ended > up finding nice ways to solve my problems with just explicit sexps, Yes, you solved problem of hyperlinking, but not of presentation. While Org has solved it for presentation very well. I wish to create meta links. Today I have tried figuring out how Org link work, but I am overwhelmed. I like to have main source file which can be then converted to many formats, that way is more creative. Source file can be viewed or edited, when viewed, it would show links as presented names. When edited, it could show source links. But when exported, only names would be exported. eev links I cannot export into text to be presentable or understandable. Right now I have working system where I can insert ⟦ (anything) ⟧ and in representation it will be shown whatever the function returns back. It is not a clickable link, rather automatically interpolated link and displayed as such, but not editable directly. I have got it working this way: (defun hyperscope-wrap-eev (name &rest body) (with-temp-buffer (insert-text-button name 'action `(lambda (b) ,@body)) (buffer-string))) Source: ⟦ (hyperscope-wrap-eev "Hyperbole DEMO file" '(find-hyperbolefile "DEMO")) ⟧ Visual representation: Hyperbole DEMO file Using enter on the link brings me to DEMO file, I can add mouse later. It uses RCD Template Interpolation System for Emacs: https://hyperscope.link/3/7/1/3/3/RCD-Template-Interpolation-System-for-Emacs.html I could shorten it to: ⟦ (rcd-eev "Hyperbole DEMO file" '(find-hyperbolefile "DEMO")) ⟧ and I guess I could that way insert any of your links. 👀 See attached frameshot how it looks like. Because you are generating buffers on the fly, your, mine and Hyperbole system would benefit of visual representation of hyperlinks just as Org does it. -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ [-- Attachment #2: Screenshot-2022-09-28-00-11-30-710565620.png --] [-- Type: image/png, Size: 99151 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-27 21:16 ` Jean Louis @ 2022-09-27 21:58 ` Jean Louis 2022-09-28 0:52 ` Eduardo Ochs 2022-09-28 3:52 ` Ihor Radchenko 1 sibling, 1 reply; 33+ messages in thread From: Jean Louis @ 2022-09-27 21:58 UTC (permalink / raw) To: Eduardo Ochs, Robert Weiner, emacs-org list * Jean Louis <bugs@gnu.support> [2022-09-28 00:20]: > Source: > > ⟦ (hyperscope-wrap-eev "Hyperbole DEMO file" '(find-hyperbolefile "DEMO")) ⟧ > > Visual representation: > > Hyperbole DEMO file > > Using enter on the link brings me to DEMO file, I can add mouse later. I guess you could re-write the function that wraps your link to temporarily something else that extracts '(find-hyperbolefile "DEMO") and runs it with M-e But once links are displayed as underline hyperlinks, your M-e would need to search into properties to activate the link. (hyperscope-capture-buffer) is my function that sorts buffer into Hyperscope database. Doing M-e on the below, inserts the link on bottom. (hyperscope-capture-buffer-insert-hyperlink) In the next step I could interpolate the text and get the actual visible and clickable link at bottom, pointing to set of notes or note we talked about. -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ⟦ (hyperscope-link 72826) ⟧ ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-27 21:58 ` Jean Louis @ 2022-09-28 0:52 ` Eduardo Ochs 2022-09-28 6:04 ` Jean Louis 0 siblings, 1 reply; 33+ messages in thread From: Eduardo Ochs @ 2022-09-28 0:52 UTC (permalink / raw) To: Eduardo Ochs, Robert Weiner, emacs-org list On Tue, 27 Sept 2022 at 18:59, Jean Louis <bugs@gnu.support> wrote: > (...) What did you do to inspect an Org link? Here's what I just tried: I created a file /tmp/foo.org containing " [[http://a/b/][ab]]\n" - i.e., a space, a link, and a newline - and then I marked the whole buffer and ran `M-1 M-x find-eregionpp' on it to pretty-print the region as a string with properties, with the flag `print-circle' turned on... see: (find-efunction 'find-eregionpp) http://angg.twu.net/eev-current/eev-blinks.el.html#find-eregionpp Apparently Org divided that file into 8 subsegments, each one with different text properties... and they mention all these keywords: face follow-link font-lock-multiline fontified help-echo highlight htmlize-link intangible invisible keymap mouse-2 mouse-3 mouse-face org-find-file-at-mouse org-link org-linked-text org-open-at-mouse rear-nonsticky I _think_ that it should be possible to make this ⟦ (hyperscope-wrap-eev "Hyperbole DEMO file" '(find-hyperbolefile "DEMO")) ⟧ into a kind of button using only three subregions with different text properties: a first invisible region with this, ⟦ (hyperscope-wrap-eev " then a visible region with "button actions", with this, Hyperbole DEMO file and then another invisible region with: " '(find-hyperbolefile "DEMO")) ⟧ Let me play with this idea for a bit - I'll send some code as soon as possible! Cheers =), Eduardo ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-28 0:52 ` Eduardo Ochs @ 2022-09-28 6:04 ` Jean Louis 2022-09-28 10:15 ` Eduardo Ochs 0 siblings, 1 reply; 33+ messages in thread From: Jean Louis @ 2022-09-28 6:04 UTC (permalink / raw) To: Eduardo Ochs; +Cc: Robert Weiner, emacs-org list * Eduardo Ochs <eduardoochs@gmail.com> [2022-09-28 03:54]: > On Tue, 27 Sept 2022 at 18:59, Jean Louis <bugs@gnu.support> wrote: > > (...) > > What did you do to inspect an Org link? > > Here's what I just tried: I created a file /tmp/foo.org containing > " [[http://a/b/][ab]]\n" - i.e., a space, a link, and a newline - > and then I marked the whole buffer and ran `M-1 M-x find-eregionpp' > on it to pretty-print the region as a string with properties, with > the flag `print-circle' turned on... see: > > (find-efunction 'find-eregionpp) > http://angg.twu.net/eev-current/eev-blinks.el.html#find-eregionpp > > Apparently Org divided that file into 8 subsegments, each one with > different text properties... and they mention all these keywords: > > face follow-link font-lock-multiline fontified help-echo highlight > htmlize-link intangible invisible keymap mouse-2 mouse-3 mouse-face > org-find-file-at-mouse org-link org-linked-text org-open-at-mouse > rear-nonsticky > > I _think_ that it should be possible to make this I have followed it, though it helps me little. You know that better. I would like to have non-Org links so that my function for links interpolates into a button. It works now in the presentation mode. I would like to make links descriptive or non descriptive just as in Org, so that it works in editing mode. > ⟦ (hyperscope-wrap-eev "Hyperbole DEMO file" '(find-hyperbolefile "DEMO")) ⟧ > > into a kind of button using only three subregions with different text > properties: a first invisible region with this, > > ⟦ (hyperscope-wrap-eev " > > then a visible region with "button actions", with this, > > Hyperbole DEMO file > > and then another invisible region with: > > " '(find-hyperbolefile "DEMO")) ⟧ Not like that really. Anything within ⟦ ⟧ or other delimiters, I wish to get interpolated depending of settings. I would like to find or mae general non-specific library for any kind of links to be customized. I know this does not explain it well. I am using: RCD Template Interpolation System for Emacs: https://hyperscope.link/3/7/1/3/3/RCD-Template-Interpolation-System-for-Emacs.html Right now I use ⟦ ⟧ delimiters, but I could use as well () Let us say ⟦ emacs-version ⟧ I get easily visible with C-a a which invokes: (defun rcd-lightweight-markup-preview () (interactive) (cond ((string= rcd-markup-language "asciidoc") (rcd-asciidoc-preview)) ((string= rcd-markup-language "asciidoctor") (rcd-asciidoctor-preview)) ((eq major-mode 'adoc-mode) (rcd-asciidoctor-preview)) ((eq major-mode 'markdown-mode) (rcd-markdown-preview)) ((eq major-mode 'html-mode) (rcd-markdown-preview)) ((eq major-mode 'mhtml-mode) (rcd-markdown-preview)) ((eq major-mode 't2t-mode) (rcd-txt2tags-html-preview)) ((eq major-mode 'text-mode) (rcd-template-buffer-preview)) ((eq major-mode 'mail-mode) (rcd-template-buffer-preview)) (t (warn "I don't have preview for `%s'" major-mode)))) Example preview function: (defun rcd-template-buffer-preview () (interactive) (let* ((current (current-buffer)) (buffer (format "Preview of buffer %s" current)) (string (buffer-string)) (mode major-mode) (point (point))) (pop-to-buffer-same-window buffer) (insert (rcd-template-eval string)) (goto-char point) (funcall mode) (message buffer))) That function uses rcd-template-eval so it means: ⟦ emacs-version ⟧ becomes "29.0.50" Thus I would like to cover ⟦ ⟧ delimiters to become button which name and action will be returned by the function itself. I know how to replace the buffer with interpolated values, and links would appear, but when I save buffer, ⟦ ⟧ links would not appear. I can use any delimiters. It would be good to have generalized Org-link descriptive and non-descriptive links for any kinds of links. - let us say that buffer is in markdown-mode - let us imagine that link is (link "Name of link" 12) where by 12 is ID of the link and where by "link" is function that provides button with button name "Name of link" and action that could be anything. - function "link" would then recognize that it is in major-mode like "markdown", and thus invoke formatting proper for markdown, something like this: ⟦ (cond (rcd::description (format "[%s](%s \"%s\") - %s" rcd::name rcd::link rcd::name rcd::description)) (rcd::name (format "[%s](%s \"%s\")" rcd::name rcd::link rcd::name)) (t (format "<%s>" rcd::link))) ⟧ but if text is in Org mode, it would invoke different formatting: ⟦ (format "[[%s][%s \"%s\"]" rcd::link rcd::name)) ⟧ For that to work in editing mode (not only in presentation), I would need generic library to capture my ⟦ ⟧ delimiters (or others) and that when buffer is interpolated, that it can be saved so that links are also saved, and not that interpolated values are saved instead of links; also that one can show back the buffer without interpolated values. -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ⟦ (hyperscope-link 72828) ⟧ ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-28 6:04 ` Jean Louis @ 2022-09-28 10:15 ` Eduardo Ochs 2022-09-29 9:22 ` Jean Louis 2022-09-29 9:42 ` Jean Louis 0 siblings, 2 replies; 33+ messages in thread From: Eduardo Ochs @ 2022-09-28 10:15 UTC (permalink / raw) To: Eduardo Ochs, Robert Weiner, emacs-org list On Wed, 28 Sept 2022 at 03:17, Jean Louis <bugs@gnu.support> wrote: > (...) Hi Jean Louis, I am not sure how to interpret the tone of your message. Does it mean that you are not interested in a prototype that works in one case? I.e., that you are only interested in something that has all the flexibility that you need? > I would like to have non-Org links so that my function for links > interpolates into a button. It works now in the presentation mode. I > would like to make links descriptive or non descriptive just as in > Org, so that it works in editing mode. You're hiding the technical details, and I don't know how to think in these terms, sorry! =( For me your "non-Org link" is a string composed of a few substrings concatenated, and each of these substrings is either without text properties or is built using "propertize" or "buttonize". In this message https://lists.gnu.org/archive/html/emacs-orgmode/2022-09/msg00725.html I referred to those substrings as "subsegments", but I don't know what is the correct term. I am trying to factor your problem into several small functions in a way that makes each of these small functions easy to test - with one-liners if possible, like I do in the eev source code - and if we do that factoring then the function that builds the "string composed of a few substrings concatenated" that I mentioned above will not call your rcd-template-eval and will not depend on the major mode... I have the impression that the hard part _now_ is to write that function that produces that string with text properties. Once we have that we will have a clearer notion of what are the "non-Org links" that we are dealing with, and it will be easier to think on the other functions. By the way, I mentioned here https://lists.gnu.org/archive/html/emacs-orgmode/2022-09/msg00725.html that the simple Org link that I inspected had about 8 subsegments with different text properties... Org links need all that because they have to handle correctly insertions and deletions at several points, cutting and pasting, "following", conversion to fundamental mode, etc, etc... I have the impression that we can start with a prototype in which our prototype-ish non-Org links have only three subsegments, but you will have to accept that in that prototype the links won't have all the features that you want... Cheers, Eduardo Ochs http://angg.twu.net/#eev ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-28 10:15 ` Eduardo Ochs @ 2022-09-29 9:22 ` Jean Louis 2022-10-08 0:28 ` Eduardo Ochs 2022-09-29 9:42 ` Jean Louis 1 sibling, 1 reply; 33+ messages in thread From: Jean Louis @ 2022-09-29 9:22 UTC (permalink / raw) To: Eduardo Ochs, Robert Weiner, emacs-org list I am definitely interested, make prototype please. Just can't answer properly on travel. Jean ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-29 9:22 ` Jean Louis @ 2022-10-08 0:28 ` Eduardo Ochs 2022-10-08 1:25 ` Jean Louis 0 siblings, 1 reply; 33+ messages in thread From: Eduardo Ochs @ 2022-10-08 0:28 UTC (permalink / raw) To: Jean Louis; +Cc: Robert Weiner, emacs-org list On Thu, 29 Sept 2022 at 06:22, Jean Louis <bugs@gnu.support> wrote: > > I am definitely interested, make prototype please. Just can't answer properly on travel. Hi Jean Louis, Sorry, I will have to put that on hold until my holidays... I wrote a very primitive prototype, but I never had to write much code that generates text with text properties, my friends are not interested in playing with that together with me, and I don't know where to borrow ideas from, so adding each new small feature by myself is a struggle... and right now writing code "whose inner details don't matter" is exactly the opposite of my notion of fun... =( [[]], Eduardo Ochs http://angg.twu.net/#eev ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-10-08 0:28 ` Eduardo Ochs @ 2022-10-08 1:25 ` Jean Louis 2022-10-11 2:42 ` Robert Weiner 0 siblings, 1 reply; 33+ messages in thread From: Jean Louis @ 2022-10-08 1:25 UTC (permalink / raw) To: Eduardo Ochs; +Cc: Robert Weiner, emacs-org list * Eduardo Ochs <eduardoochs@gmail.com> [2022-10-08 03:28]: > On Thu, 29 Sept 2022 at 06:22, Jean Louis <bugs@gnu.support> wrote: > > > > I am definitely interested, make prototype please. Just can't answer properly on travel. > > Hi Jean Louis, > > Sorry, I will have to put that on hold until my holidays... I wrote a > very primitive prototype, but I never had to write much code that > generates text with text properties, my friends are not interested in > playing with that together with me, and I don't know where to borrow > ideas from, so adding each new small feature by myself is a > struggle... and right now writing code "whose inner details don't > matter" is exactly the opposite of my notion of fun... =( Fine, solution will come up with time. In the sense is similar to Org links, though just universal. With the RCD Template Interpolation System for Emacs: https://hyperscope.link/3/7/1/3/3/RCD-Template-Interpolation-System-for-Emacs.html and this function, I can easily replace such snippets as below to their values: ** Hello heading ⟦ (format "[[https://www.example.com][Hello there %s]]" user-full-name) ⟧ (defun rcd-org-interpolate () "Extrapolate Org buffer before dispatch." (interactive) (let ((my-org (buffer-substring (point-min) (point-max)))) (with-temp-buffer (insert (rcd-template-eval my-org)) (org-export-dispatch)))) (keymap-set org-mode-map "C-c C-e" 'rcd-org-interpolate) to get Org hyperlinks. Or any other type of a link? (defun hyperscope-hyperlink (id &optional markup) (let ((name (hyperscope-name id)) (link (hyperscope-hyperdocument-url id)) (markup (or markup (hyperscope-markup-type id)))) ;; (unless (or (eq (last-key-binding) 'newline) ;; (= (last-key) 13)) ;;(rcd-button-insert name (lambda (_) (hyperscope id)))) (cond ((or (eq major-mode 'markdown-mode) (and (not rcd-current-table-id) (or (= markup 2) (= markup 3) (= markup 6)))) (format "[%s](%s \"%s\")" name link name)) ((eq major-mode 'adoc-mode) (format "%s[%s]" (hyperscope-hyperdocument-url id) name)) ((eq major-mode 'org-mode) (format "[[%s][%s]]" link name))))) Same may be used to insert buttons: (defun rcd-button-insert (button-text action-function &optional how-many) "Insert button BUTTON-TEXT with ACTION-FUNCTION. Optional number HOW-MANY adds superscript digits to BUTTON-TEXT." (insert-text-button button-text 'action action-function 'follow-link t) (when how-many (insert (rcd-superscript-digits how-many)))) (rcd-button-insert "Hello" (lambda (_) (message "I said Hello"))) now if button can be inserted, it means ⟦ (could insert button as well) ⟧ and make the link invisible part of text. Once toggled, invisible part could become visible and saved as such link. -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-10-08 1:25 ` Jean Louis @ 2022-10-11 2:42 ` Robert Weiner 2022-10-11 4:59 ` Jean Louis 0 siblings, 1 reply; 33+ messages in thread From: Robert Weiner @ 2022-10-11 2:42 UTC (permalink / raw) To: Jean Louis; +Cc: Eduardo Ochs, emacs-org list Hi Jean: I know this does not address everything you want but if you leverage Hyperbole’s capabilities, you’ll probably be able to get what you want with a lot less code. First, creating an explicit button displays only the button name as you like, fontified as you like, and with the button action hidden. So then you need to write a function that adds or removed the button action from the buffer when you want to see it, utilizing existing Hyperbole code from the actype or action class for manipulating actions. For your generalized syntax, I think you would be better off using the angle brackets of Hyperbole’s action buttons but you could instead use the defil macro to create your own link button type and delimiter format with just a few lines of code. Just follow the example in the docstring for that macro. Org probably has similar capabilities with its link types though not as flexible with the syntax. -- rsw > On Oct 8, 2022, at 1:00 AM, Jean Louis <bugs@gnu.support> wrote: > > * Eduardo Ochs <eduardoochs@gmail.com> [2022-10-08 03:28]: >>> On Thu, 29 Sept 2022 at 06:22, Jean Louis <bugs@gnu.support> wrote: >>> >>> I am definitely interested, make prototype please. Just can't answer properly on travel. >> >> Hi Jean Louis, >> >> Sorry, I will have to put that on hold until my holidays... I wrote a >> very primitive prototype, but I never had to write much code that >> generates text with text properties, my friends are not interested in >> playing with that together with me, and I don't know where to borrow >> ideas from, so adding each new small feature by myself is a >> struggle... and right now writing code "whose inner details don't >> matter" is exactly the opposite of my notion of fun... =( > > Fine, solution will come up with time. > > In the sense is similar to Org links, though just universal. With the > RCD Template Interpolation System for Emacs: > https://hyperscope.link/3/7/1/3/3/RCD-Template-Interpolation-System-for-Emacs.html > and this function, I can easily replace such snippets as below to their values: > > ** Hello heading > > ⟦ (format "[[https://www.example.com][Hello there %s]]" user-full-name) ⟧ > > (defun rcd-org-interpolate () > "Extrapolate Org buffer before dispatch." > (interactive) > (let ((my-org (buffer-substring (point-min) (point-max)))) > (with-temp-buffer > (insert (rcd-template-eval my-org)) > (org-export-dispatch)))) > > (keymap-set org-mode-map "C-c C-e" 'rcd-org-interpolate) > > to get Org hyperlinks. Or any other type of a link? > > (defun hyperscope-hyperlink (id &optional markup) > (let ((name (hyperscope-name id)) > (link (hyperscope-hyperdocument-url id)) > (markup (or markup (hyperscope-markup-type id)))) > ;; (unless (or (eq (last-key-binding) 'newline) > ;; (= (last-key) 13)) > ;;(rcd-button-insert name (lambda (_) (hyperscope id)))) > (cond ((or (eq major-mode 'markdown-mode) > (and (not rcd-current-table-id) > (or (= markup 2) > (= markup 3) > (= markup 6)))) > (format "[%s](%s \"%s\")" name link name)) > ((eq major-mode 'adoc-mode) (format "%s[%s]" (hyperscope-hyperdocument-url id) name)) > ((eq major-mode 'org-mode) (format "[[%s][%s]]" link name))))) > > Same may be used to insert buttons: > > (defun rcd-button-insert (button-text action-function &optional how-many) > "Insert button BUTTON-TEXT with ACTION-FUNCTION. > > Optional number HOW-MANY adds superscript digits to BUTTON-TEXT." > (insert-text-button button-text > 'action > action-function > 'follow-link t) > (when how-many > (insert (rcd-superscript-digits how-many)))) > > (rcd-button-insert "Hello" (lambda (_) (message "I said Hello"))) > > now if button can be inserted, it means ⟦ (could insert button as well) ⟧ > and make the link invisible part of text. Once toggled, invisible > part could become visible and saved as such link. > > > -- > Jean > > Take action in Free Software Foundation campaigns: > https://www.fsf.org/campaigns > > In support of Richard M. Stallman > https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-10-11 2:42 ` Robert Weiner @ 2022-10-11 4:59 ` Jean Louis 0 siblings, 0 replies; 33+ messages in thread From: Jean Louis @ 2022-10-11 4:59 UTC (permalink / raw) To: Robert Weiner; +Cc: Eduardo Ochs, emacs-org list * Robert Weiner <rswgnu@gmail.com> [2022-10-11 05:43]: > I know this does not address everything you want but if you leverage > Hyperbole’s capabilities, you’ll probably be able to get what you > want with a lot less code. What I want is to be able to interpolate links like: ⟦ (some-link) ⟧ on the fly similarly Org links, in such way that whatever function `some-link' returns it would be displayed on its place. Function may return string or string as button or anything else. Then similarly to org-toggle-link-display I wish to fontify such buttons in editable buffer and be able to reverse it back. I guess for that to work text properties shall be able to remember the button ⟦ (some-link) ⟧. But I do not know much about it, I am learning. I already use that system though not in editing mode. I have editing more wher I can see ⟦ something ⟧ and I have presentation mode, where source is interpolated on the fly and I can see interpolated values or button links. System of interpolation spare me time. > First, creating an explicit button displays only the button name as > you like, fontified as you like, and with the button action hidden. > So then you need to write a function that adds or removed the button > action from the buffer when you want to see it, utilizing existing > Hyperbole code from the actype or action class for manipulating > actions. > For your generalized syntax, I think you would be better off using > the angle brackets of Hyperbole’s action buttons but you could > instead use the defil macro to create your own link button type and > delimiter format with just a few lines of code. Just follow the > example in the docstring for that macro. I already use Hyperbole on links like ⟦ (rcd-db-tabulated-edit-entry "people" 1) ⟧ or ⟦ (hyperscope-action 587) ⟧ (the last one brings me to mail mode with prepared email headers writing email). It is not hard: (defil rcd-template-eval "⟦ " " ⟧" ".*" "{M-: \\& RET}") I can use command to interpolate the source and present it. It works well. Editing in the same time with interpolated links is what I miss. That I have in Org mode, but links miss dynamic capacity. > Org probably has similar capabilities with its link types though not > as flexible with the syntax. I would use Org buttons, but they do not have disappearing or dynamic capacity. Text could have Hyperlinks, and be well referenced that way. In export or interpolating mode, depending of the export type or major mode, hyperlinks themselves may decide how to interpolate, if to disappear from text, or if to convert themselves into Org links or into HTML links, Markdown links, or Emacs links. -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-28 10:15 ` Eduardo Ochs 2022-09-29 9:22 ` Jean Louis @ 2022-09-29 9:42 ` Jean Louis 2022-09-29 11:55 ` Quiliro Ordóñez 1 sibling, 1 reply; 33+ messages in thread From: Jean Louis @ 2022-09-29 9:42 UTC (permalink / raw) To: emacs-orgmode On September 28, 2022 10:15:06 AM UTC, Eduardo Ochs <eduardoochs@gmail.com> wrote: >> I would like to have non-Org links so that my function for links >> interpolates into a button. It works now in the presentation mode. I >> would like to make links descriptive or non descriptive just as in >> Org, so that it works in editing mode. > >You're hiding the technical details, and I don't know how to think in >these terms, sorry! =( Not hiding at all. If I would know technical details I would not need it. I have you examples with your links and wrapping then with name for link. >For me your "non-Org link" is a string composed of a few substrings >concatenated, and each of these substrings is either without text >properties or is built using "propertize" or "buttonize". In this >message I don't think that way, that would make links specific just as they are specific in Org mode. To make links not specific, but to liberate then from any mode, one would need to forget how link looks like inside some brackets and leave it to whatever function to interpolate itself into a button or anything else. Did you try my interpolation package? It can already do that. But how can I read from properties and get back what was the link before? That is what I don't know how. And my way of doing links it is totally out of any frame I have seen before. https://lists.gnu.org/archive/html/emacs-orgmode/2022-09/msg00725.html There shall be no parsing of the link as that would make the link specific again. If we make generic package than anybody else later will benefit. Generic links package is not tied to how link looks like, not tied to any function. On the link above I my example. Imagine (ln "name" (eev-funct do)) that would Interpolate to "name", but also {{{ name link }}} to to interpolate to something, and what does interpolation should be left to programmer. Imagine having X+ of documents, and your link name is "New Yrk" mistakenly, by using generic approach one can keep the name outside of the document, correct it and in all documents it get corrected upon invocation or opening of it. I use that system to inject my contact details, no matter if contact details change, I need not correct theđ one by one. >I am trying to factor your problem into several small functions in a >way that makes each of these small functions easy to test - with >one-liners if possible, like I do in the eev source code - and if we >do that factoring then the function that builds the "string composed >of a few substrings concatenated" that I mentioned above will not call >your rcd-template-eval and will not depend on the major mode... I don't think that parsing strings make it generic. Template Interpolation system makes it generic. What has to be solved is how to insert the button so that it may be reversed into what it was before. >I have the impression that the hard part _now_ is to write that >function that produces that string with text properties. I have used insert button function. > Once we have >that we will have a clearer notion of what are the "non-Org links" >that we are dealing with, and it will be easier to think on the other >functions. Those generic links can as well become Org like links as there is no limitations. Jean ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-29 9:42 ` Jean Louis @ 2022-09-29 11:55 ` Quiliro Ordóñez 0 siblings, 0 replies; 33+ messages in thread From: Quiliro Ordóñez @ 2022-09-29 11:55 UTC (permalink / raw) To: emacs-orgmode El 2022-09-29 04:42, Jean Louis escribió: > On September 28, 2022 10:15:06 AM UTC, Eduardo Ochs > <eduardoochs@gmail.com> wrote: > >>> I would like to have non-Org links so that my function for links >>> interpolates into a button. It works now in the presentation mode. I >>> would like to make links descriptive or non descriptive just as in >>> Org, so that it works in editing mode. >> >>You're hiding the technical details, and I don't know how to think in >>these terms, sorry! =( > > Not hiding at all. If I would know technical details I would not need > it. I have you examples with your links and wrapping then with name > for link. > >>For me your "non-Org link" is a string composed of a few substrings >>concatenated, and each of these substrings is either without text >>properties or is built using "propertize" or "buttonize". In this >>message > > I don't think that way, that would make links specific just as they > are specific in Org mode. > > To make links not specific, but to liberate then from any mode, one > would need to forget how link looks like inside some brackets and > leave it to whatever function to interpolate itself into a button or > anything else. > > Did you try my interpolation package? It can already do that. But how > can I read from properties and get back what was the link before? That > is what I don't know how. And my way of doing links it is totally out > of any frame I have seen before. > https://lists.gnu.org/archive/html/emacs-orgmode/2022-09/msg00725.html > > There shall be no parsing of the link as that would make the link > specific again. > > If we make generic package than anybody else later will benefit. > Generic links package is not tied to how link looks like, not tied to > any function. > > On the link above I my example. > > Imagine (ln "name" (eev-funct do)) that would Interpolate to "name", > but also {{{ name link }}} to to interpolate to something, and what > does interpolation should be left to programmer. > > Imagine having X+ of documents, and your link name is "New Yrk" > mistakenly, by using generic approach one can keep the name outside of > the document, correct it and in all documents it get corrected upon > invocation or opening of it. > > I use that system to inject my contact details, no matter if contact > details change, I need not correct theđ one by one. > >>I am trying to factor your problem into several small functions in a >>way that makes each of these small functions easy to test - with >>one-liners if possible, like I do in the eev source code - and if we >>do that factoring then the function that builds the "string composed >>of a few substrings concatenated" that I mentioned above will not call >>your rcd-template-eval and will not depend on the major mode... > > I don't think that parsing strings make it generic. > > Template Interpolation system makes it generic. > > What has to be solved is how to insert the button so that it may be > reversed into what it was before. > >>I have the impression that the hard part _now_ is to write that >>function that produces that string with text properties. > > I have used insert button function. > >> Once we have >>that we will have a clearer notion of what are the "non-Org links" >>that we are dealing with, and it will be easier to think on the other >>functions. > > Those generic links can as well become Org like links as there is no > limitations. > > > Jean It is not clear which parts of the message are Jean's and which are Eduardo's. Not that the messenger is important to side with the message. But that the message is understood better when it is related to the perspective that the messenger has. ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-27 21:16 ` Jean Louis 2022-09-27 21:58 ` Jean Louis @ 2022-09-28 3:52 ` Ihor Radchenko 2022-09-28 9:16 ` Jean Louis 1 sibling, 1 reply; 33+ messages in thread From: Ihor Radchenko @ 2022-09-28 3:52 UTC (permalink / raw) To: Jean Louis; +Cc: Eduardo Ochs, Robert Weiner, emacs-org list Jean Louis <bugs@gnu.support> writes: > I wish to create meta links. Today I have tried figuring out how Org > link work, but I am overwhelmed. Have you looked at https://orgmode.org/manual/Adding-Hyperlink-Types.html ? If you find it confusing, please let us know. -- Ihor Radchenko, Org mode contributor, Learn more about Org mode at https://orgmode.org/. Support Org development at https://liberapay.com/org-mode, or support my work at https://liberapay.com/yantar92 ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-28 3:52 ` Ihor Radchenko @ 2022-09-28 9:16 ` Jean Louis 2022-09-29 4:07 ` Ihor Radchenko 0 siblings, 1 reply; 33+ messages in thread From: Jean Louis @ 2022-09-28 9:16 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Eduardo Ochs, Robert Weiner, emacs-org list * Ihor Radchenko <yantar92@gmail.com> [2022-09-28 06:52]: > Jean Louis <bugs@gnu.support> writes: > > > I wish to create meta links. Today I have tried figuring out how Org > > link work, but I am overwhelmed. > > Have you looked at > https://orgmode.org/manual/Adding-Hyperlink-Types.html ? > > If you find it confusing, please let us know. That relates to adding different type of Org links. What I am looking for is generic way of displaying links and not displaying links similar to Org links, so that I can add any type of links beyond Org links. Let us say that link is: (link "Duck" (browse-url "http://www.duckduckgo.com")) such link should be displyed as: __Duck__ (underlined) but just as in Org mode to have toggle options descriptive or non-descriptive links. and that I can inject the format of the link like parenthesis and simple into such generic way of making links. It would go beyond Org that way and be available in any modes. -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-28 9:16 ` Jean Louis @ 2022-09-29 4:07 ` Ihor Radchenko 2022-09-29 9:59 ` Jean Louis 0 siblings, 1 reply; 33+ messages in thread From: Ihor Radchenko @ 2022-09-29 4:07 UTC (permalink / raw) To: Jean Louis; +Cc: Eduardo Ochs, Robert Weiner, emacs-org list Jean Louis <bugs@gnu.support> writes: > Let us say that link is: > > (link "Duck" (browse-url "http://www.duckduckgo.com")) > > such link should be displyed as: > > __Duck__ (underlined) > > but just as in Org mode to have toggle options descriptive or > non-descriptive links. > > and that I can inject the format of the link like parenthesis and > simple into such generic way of making links. It would go beyond Org > that way and be available in any modes. org-open-at-point-global can work outside Org to open Org links. For Org-like fontification, you can add an entry to font-lock-keywords that will fontify anything matching org-link-any-re and apply org-activate-links. However, you may need to rewrite org-activate-link to work outside Org mode. It should not be prohibitively hard. (I suspect that Hyperbole could be the right place to request the fontification feature - they already take care about fontification of implicit buttons; may as well extend it) -- Ihor Radchenko, Org mode contributor, Learn more about Org mode at https://orgmode.org/. Support Org development at https://liberapay.com/org-mode, or support my work at https://liberapay.com/yantar92 ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-09-29 4:07 ` Ihor Radchenko @ 2022-09-29 9:59 ` Jean Louis 0 siblings, 0 replies; 33+ messages in thread From: Jean Louis @ 2022-09-29 9:59 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Eduardo Ochs, Robert Weiner, emacs-org list I will see how to implement this, thank you On September 29, 2022 4:07:15 AM UTC, Ihor Radchenko <yantar92@gmail.com> wrote: >Jean Louis <bugs@gnu.support> writes: > >> Let us say that link is: >> >> (link "Duck" (browse-url "http://www.duckduckgo.com")) >> >> such link should be displyed as: >> >> __Duck__ (underlined) >> >> but just as in Org mode to have toggle options descriptive or >> non-descriptive links. >> >> and that I can inject the format of the link like parenthesis and >> simple into such generic way of making links. It would go beyond Org >> that way and be available in any modes. > >org-open-at-point-global can work outside Org to open Org links. > >For Org-like fontification, you can add an entry to font-lock-keywords >that will fontify anything matching org-link-any-re and apply >org-activate-links. However, you may need to rewrite org-activate-link >to work outside Org mode. It should not be prohibitively hard. > >(I suspect that Hyperbole could be the right place to request the >fontification feature - they already take care about fontification of >implicit buttons; may as well extend it) Jean ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-27 0:49 ` Robert Weiner 2022-06-27 3:48 ` Eduardo Ochs @ 2022-06-28 4:48 ` Eduardo Ochs 2022-06-28 6:26 ` Robert Weiner 2022-09-27 14:43 ` Jean Louis 2 siblings, 1 reply; 33+ messages in thread From: Eduardo Ochs @ 2022-06-28 4:48 UTC (permalink / raw) To: Robert Weiner; +Cc: Org Mode On Sun, 26 Jun 2022 at 21:50, Robert Weiner <rsw@gnu.org> wrote: > > So here is a simple implementation that is not unlike your own > though the functions are a bit simpler and more clearly documented > _without a listing of every possible test case type_ and requires > neither Hyperbole nor Org until you want to activate things as > buttons: Hi Robert, I think that the part in "_..._"s above deserves a detailed answer. I started using GNU/Linux in the mid-90s. Before that my favorite languages were Icon and Forth. In Forth I could do AMAZING things in less than 50 lines of code, but my programs would usually become confusing and unmanageable when they grew bigger than that. There is a famous book by Fred Brooks called "The Mythical Man-Month", and one of its chapters is called "Plan to Throw One Away": https://wiki.c2.com/?PlanToThrowOneAway I took that slogan seriously. Most of the time when I realized that something that I was doing by hand could be automated I would write a first attempt to automate it - _as a prototype_, that I regarded partly a program and partly as a way to help me think how that task could be structured, and that would probably be "thrown away" if I needed a cleaner solution later. In Forth it was very easy to implement both strange interfaces and little languages, in this sense: https://wiki.c2.com/?LittleLanguage In Emacs less so, but I could still do lots of funny things using eval-last-sexp to use sexps as buttons. When we are writing throwaway code "planning to throw one away" then using tests in comments is a very good way to document the code. And when I rewrite my prototypes I usually prefer to document them using text ***AND*** executable examples rather than just text. One of the effects of using this style is that the users of eev see that they can use that style in their notes too - and with that their notes become much closer to being "executable notes", in this sense, http://angg.twu.net/eev-intros/find-here-links-intro.html than they would be if they believed that they had to write the docs of their functions as just text. You are sort of saying that having tests in comments is bad style. Well, it's not. =/ [[]], Eduardo Ochs http://angg.twu.net/#eev ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-28 4:48 ` Eduardo Ochs @ 2022-06-28 6:26 ` Robert Weiner 0 siblings, 0 replies; 33+ messages in thread From: Robert Weiner @ 2022-06-28 6:26 UTC (permalink / raw) To: Eduardo Ochs; +Cc: Org Mode [-- Attachment #1: Type: text/plain, Size: 4288 bytes --] Hi Eduardo: Many programmers refuse to document almost anything and expect the code to speak for itself. Or they throw random comments throughout their code that don't help elucidate things. The nice thing about most Elisp code is that the inputs and outputs of functions are often pretty well documented, since people learn from many good examples. I support you in wanting to document and explain things very clearly for your readers. For most people, Hyperbole is extensively documented down to the function-level. But you want an 'atomic'-level description of the internals of Hyperbole which I think would be useful to only a very small population. Good programming is about producing and layering clean abstractions that sometimes must mask internal complexity and expose only the interfaces necessary for use (could be a UI, an API or a class abstraction). It's not turtles all the way down as the 'physics' of different levels of implementation varies. Hackers do build from lego blocks; they don't spend their time trying to deconstruct everything just to get comfortable with every component they use, in general. If you want to spend years trying to wrap your mind around something a bit complex then read The Art of the Meta-object Protocol many times. Then, if you survive, come back to Hyperbole and its call tree will seem simple to you :-) Seriously though, I get that you learn and document differently than many other people, so just do your own thing, your own way. I am reminded of the Hudsucker Proxy where the 'rube' is derided for his stupid idea until later it turns out to be one of the most profitable inventions in history. Maybe the rest of us just can't see what you see because of the way you express it, though if we could, we would be enthralled. I know a bit what that is like! Best of luck, -- rsw On Tue, Jun 28, 2022 at 12:48 AM Eduardo Ochs <eduardoochs@gmail.com> wrote: > On Sun, 26 Jun 2022 at 21:50, Robert Weiner <rsw@gnu.org> wrote: > > > > So here is a simple implementation that is not unlike your own > > though the functions are a bit simpler and more clearly documented > > _without a listing of every possible test case type_ and requires > > neither Hyperbole nor Org until you want to activate things as > > buttons: > > > Hi Robert, > > I think that the part in "_..._"s above deserves a detailed answer. > > I started using GNU/Linux in the mid-90s. Before that my favorite > languages were Icon and Forth. In Forth I could do AMAZING things in > less than 50 lines of code, but my programs would usually become > confusing and unmanageable when they grew bigger than that. > > There is a famous book by Fred Brooks called "The Mythical Man-Month", > and one of its chapters is called "Plan to Throw One Away": > > https://wiki.c2.com/?PlanToThrowOneAway > > I took that slogan seriously. Most of the time when I realized that > something that I was doing by hand could be automated I would write a > first attempt to automate it - _as a prototype_, that I regarded > partly a program and partly as a way to help me think how that task > could be structured, and that would probably be "thrown away" if I > needed a cleaner solution later. > > In Forth it was very easy to implement both strange interfaces and > little languages, in this sense: > > https://wiki.c2.com/?LittleLanguage > > In Emacs less so, but I could still do lots of funny things using > eval-last-sexp to use sexps as buttons. > > When we are writing throwaway code "planning to throw one away" then > using tests in comments is a very good way to document the code. And > when I rewrite my prototypes I usually prefer to document them using > text ***AND*** executable examples rather than just text. One of the > effects of using this style is that the users of eev see that they can > use that style in their notes too - and with that their notes become > much closer to being "executable notes", in this sense, > > http://angg.twu.net/eev-intros/find-here-links-intro.html > > than they would be if they believed that they had to write the docs of > their functions as just text. > > You are sort of saying that having tests in comments is bad style. > Well, it's not. =/ > > [[]], > Eduardo Ochs > http://angg.twu.net/#eev > [-- Attachment #2: Type: text/html, Size: 6112 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-27 0:49 ` Robert Weiner 2022-06-27 3:48 ` Eduardo Ochs 2022-06-28 4:48 ` Eduardo Ochs @ 2022-09-27 14:43 ` Jean Louis 2 siblings, 0 replies; 33+ messages in thread From: Jean Louis @ 2022-09-27 14:43 UTC (permalink / raw) To: rswgnu; +Cc: Eduardo Ochs, Org Mode * Robert Weiner <rsw@gnu.org> [2022-06-27 03:51]: > (defun youtube-url-from-time (video-link time-string) > "Given a VIDEO-LINK and a colon-separated TIME-STRING, e.g. 2:44 (two > minutes, 45 seconds into the video), return the url to play from that point > in the video. > Return nil if TIME-STRING is invalid." > (when (setq time-string (youtube-normalize-time time-string)) > (format "%s&t=%s" > (youtube-normalize-link video-link) > time-string))) Thanks for functions, I will not them down. I was collecting YouTube video links directly from YouTube, so they look like: Dog stands up: https://youtu.be/LtCmlyKxKUU?t=384 And I can use your functions to improve system later. > Then once you load the Hyperbole package, in any buffer you could use any > of the 3 buttons below which all do the same thing when pressed upon with > the Action Key, {M-RET}: > > <youtube-play-from-time "WKwZHSbHmPg" "2:44"> > <youtube-play-from-time "www.youtube.com/watch?v=WKwZHSbHmPg" "2:44"> > <youtube-play-from-time "https://www.youtube.com/watch?v=WKwZHSbHmPg" > "2:44"> I have totally got the idea how it is analogue to eev styles of links. What bothers me is the fact that links are ugly and not user friendly. I would prefer some interpolation like Org does it with Org links, so that links are shown as their names: - Instruction on how to break the egg, cleaning of eggs; - Using glass edge to break the egg; Something like that, hyperlinked, in every buffer. > an implicit button type that recognized strings like "yt:WKwZHSbHmPg@2:44" > and invoked the calls shown above. Just that it does not look nice. It misses the "name" part of the link, just as in HTML. We shall work towards better representation of links. -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: Org, Hyperbole, and eev 2022-06-26 18:23 ` Robert Weiner 2022-06-26 19:45 ` Eduardo Ochs @ 2022-09-27 14:16 ` Jean Louis 1 sibling, 0 replies; 33+ messages in thread From: Jean Louis @ 2022-09-27 14:16 UTC (permalink / raw) To: rswgnu; +Cc: Eduardo Ochs, Org Mode * Robert Weiner <rsw@gnu.org> [2022-06-26 21:25]: > I took a brief look today at some of the code in the latest packaged > release of eev from ELPA, as well as a bit at some of your email archives > and video links. What I see is that you like things extraordinarily > concrete and packages like Hyperbole and Org try to build up generalized > abstractions that can be used in many contexts. When you try to break down > how these abstractions work at the very low-level concrete mental model you > like, you find them too complex and therefore have to set them aside. If > you can't bend on that, then I think your choice is right, to just build > large amounts of low-level code that meets your needs. I think the way you > archive long lists of hyperlinks into videos for every few words spoken in > the video speaks to this style. I see the utility but this is not a common > style or need. Let me add some new view point on that. What is common is not necessarily what advances access to knowledge. If we think of children who did not yet learn multiplication table, their common level of knowledge is what it is. But once they learn multiplication table they get empowered for life. Finely grained information management systems are empowerment for human. It is quite clear that minority of people will use such systems, just as it is clear that advanced search engine features will be used just by minority of people. Computer programs are there to advanced human, not to keep them on the level where they are. Though majority of corporations want exactly that, keep the computer user entertained, not knowing the power that one may gain. In general, everybody has general benefit of knowledge and access to knowledge. And in general not everybody will be able to access it. That howevever shall not stop us of inventing new systems that are of benefit for human. -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 33+ messages in thread
end of thread, other threads:[~2022-10-11 6:14 UTC | newest] Thread overview: 33+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-06-26 15:56 Org, Hyperbole, and eev Eduardo Ochs 2022-06-26 16:28 ` Robert Weiner 2022-06-26 17:51 ` Eduardo Ochs 2022-06-26 18:23 ` Robert Weiner 2022-06-26 19:45 ` Eduardo Ochs 2022-06-26 20:23 ` Robert Weiner 2022-06-26 23:25 ` Eduardo Ochs 2022-06-27 0:49 ` Robert Weiner 2022-06-27 3:48 ` Eduardo Ochs 2022-06-27 4:11 ` Robert Weiner 2022-06-28 4:43 ` Eduardo Ochs 2022-09-27 15:10 ` Jean Louis 2022-09-27 16:22 ` Eduardo Ochs 2022-09-27 21:16 ` Jean Louis 2022-09-27 21:58 ` Jean Louis 2022-09-28 0:52 ` Eduardo Ochs 2022-09-28 6:04 ` Jean Louis 2022-09-28 10:15 ` Eduardo Ochs 2022-09-29 9:22 ` Jean Louis 2022-10-08 0:28 ` Eduardo Ochs 2022-10-08 1:25 ` Jean Louis 2022-10-11 2:42 ` Robert Weiner 2022-10-11 4:59 ` Jean Louis 2022-09-29 9:42 ` Jean Louis 2022-09-29 11:55 ` Quiliro Ordóñez 2022-09-28 3:52 ` Ihor Radchenko 2022-09-28 9:16 ` Jean Louis 2022-09-29 4:07 ` Ihor Radchenko 2022-09-29 9:59 ` Jean Louis 2022-06-28 4:48 ` Eduardo Ochs 2022-06-28 6:26 ` Robert Weiner 2022-09-27 14:43 ` Jean Louis 2022-09-27 14:16 ` Jean Louis
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).