Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
####### # # E-scripts on Hyperbole. # # Note 1: use the eev command (defined in eev.el) and the # ee alias (in my .zshrc) to execute parts of this file. # Executing this file as a whole makes no sense. # An introduction to eev can be found here: # # (find-eev-quick-intro) # http://angg.twu.net/eev-intros/find-eev-quick-intro.html # # Note 2: be VERY careful and make sure you understand what # you're doing. # # Note 3: If you use a shell other than zsh things like |& # and the for loops may not work. # # Note 4: I always run as root. # # Note 5: some parts are too old and don't work anymore. Some # never worked. # # Note 6: the definitions for the find-xxxfile commands are on my # .emacs. # # Note 7: if you see a strange command check my .zshrc -- it may # be defined there as a function or an alias. # # Note 8: the sections without dates are always older than the # sections with dates. # # This file is at <http://angg.twu.net/e/hyperbole.e> # or at <http://angg.twu.net/e/hyperbole.e.html>. # See also <http://angg.twu.net/emacs.html>, # <http://angg.twu.net/.emacs[.html]>, # <http://angg.twu.net/.zshrc[.html]>, # <http://angg.twu.net/escripts.html>, # and <http://angg.twu.net/>. # ####### # «.mailing-lists» (to "mailing-lists") # «.hyperbole» (to "hyperbole") # «.hyperbole-eev-mail-1» (to "hyperbole-eev-mail-1") # «.hyperbole-eev-mail-2» (to "hyperbole-eev-mail-2") # «.turn-off» (to "turn-off") # «.hyperbole-mailing-lists» (to "hyperbole-mailing-lists") # «.hyperbole-videos» (to "hyperbole-videos") # «.hyperscope» (to "hyperscope") # «.email-2020sep20» (to "email-2020sep20") # «.my-email-2020sep21» (to "my-email-2020sep21") # «.koutline» (to "koutline") # «.bring-your-text-to-life» (to "bring-your-text-to-life") # «.hyp-and-eev-2020sep27» (to "hyp-and-eev-2020sep27") # «.hyp-and-eev-2020sep30» (to "hyp-and-eev-2020sep30") # «.rocket-buttons» (to "rocket-buttons") # «.o-h-and-e-524» (to "o-h-and-e-524") # «.hyp-and-org-2022jun20» (to "hyp-and-org-2022jun20") # «.hyp-disable-2022jun23» (to "hyp-disable-2022jun23") # «.on-and-off» (to "on-and-off") # «.M-RET-on-action-button» (to "M-RET-on-action-button") # «.o-h-and-e-738» (to "o-h-and-e-738") # «.o-h-and-e-742» (to "o-h-and-e-742") # «.o-h-and-e-750» (to "o-h-and-e-750") # «.o-h-and-e-757» (to "o-h-and-e-757") # «.o-h-and-e-801» (to "o-h-and-e-801") # «.o-h-and-e-802» (to "o-h-and-e-802") # «.hypobole» (to "hypobole") # «.2024» (to "2024") See: http://angg.twu.net/hyperbole.html ##### # # mailing-list # 2021may21 # ##### # «mailing-lists» (to ".mailing-lists") # https://savannah.gnu.org/mail/?group=hyperbole # http://lists.gnu.org/archive/html/hyperbole-users/ # https://lists.gnu.org/mailman/listinfo/hyperbole-users # http://lists.gnu.org/archive/html/bug-hyperbole/ # http://lists.gnu.org/mailman/listinfo/bug-hyperbole ##### # # Hyperbole # 2000jan08 / 2019apr20 # ##### # «hyperbole» (to ".hyperbole") # https://www.gnu.org/software/hyperbole/ # (find-epackages "\n hyperbole " t) # (find-epackage 'hyperbole) # (find-elpafile "hyperbole-7.0.2/") # (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-7.0.2/" "hyperbole") # (find-hyperbolefile "") # (find-hyperbolefile "DEMO") # (find-hyperbolenode "") # (find-hyperbolenode "Buttons") # (find-hyperbolenode "Installation") # (find-hyperbolenode "Installation" "(package-refresh-contents)") # (require 'hyperbole) # (eek "M-h M-k C-h h ;; hyperbole") # (find-hyperbolenode "Manual Overview") https://www.reddit.com/r/emacs/comments/by28x5/my_gnu_hyperbole_vision_quest_or_jupiter_and/ # (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-7.0.2/" "hyperbole") # (find-hyperbolefile "") # (find-hyperbolefile "DEMO") # (find-hyperbolenode "") # (find-hyperbolenode "Buttons") # (find-hyperbolenode "Installation") # (find-hyperbolenode "Installation" "(package-refresh-contents)") (find-ekeymapdescr hui:menu-mode-map) (find-ekeymapdescr hyrolo-mode-map) # Old: # rm -Rv /usr/src/hyperbole/ cd /usr/src/ tar -xvzf $S/ftp/ftp.beopen.com/pub/hyperbole/beopen-hyperbole-4.18.tgz cd /usr/src/hyperbole/ # # (code-c-d "hypb" "/usr/src/hyperbole/") # (find-hypbfile "") # (find-hypbfile "HY-README" "To autoload Hyperbole") (defvar hyperb:dir "/usr/src/hyperbole/") (load (expand-file-name "hversion" hyperb:dir)) (load (expand-file-name "hyperbole" hyperb:dir)) (require 'hsite) # Not ok yet ##### # # Bridge between Hyperbole and eev: e-mail 1 # 2019apr20 # ##### # «hyperbole-eev-mail-1» (to ".hyperbole-eev-mail-1") # https://github.com/edrx/eev/issues/1 # https://github.com/edrx/eev/issues/1#issuecomment-485137009 Hi Robert, the design principles of eev and Hyperbole are too different! I think that the "right way" right now is to build a bridge between eev and Hyperbole, with a mini-tutorial of Hyperbole for eev users (I'm working on a version 0.0 of that right now, with "eev users" being "me"), and something correspondent in the other direction... Can I send some questions? They will have some eev-isms in them, but note that you can run all their hyperlinks in them with `C-e C-x C-e' if you have done this: (require 'eev-load) You don't even need the eev-mode keybindings. I installed Hyperbole from ELPA and these are some of my first relevant elisp hyperlinks: (find-epackage 'hyperbole) (require 'hyperbole) (code-c-d "elpa" "~/.emacs.d/elpa/") (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-7.0.2/" "hyperbole") (find-elpafile "hyperbole-readme.txt") (find-elpafile "" ""hyperbole) (find-hyperbolefile "DEMO") (find-hyperbolefile "DEMO" "Action Key is {M-RET}") (find-hyperbolefile "DEMO" "Assist Key is {C-u M-RET}") (find-hyperbolefile "DEMO" "Press the Action Key within this <(button)>") (find-hyperbolenode "") (find-hyperbolenode "Installation") (find-hyperbolenode "Buttons") (eek "M-h M-k M-RET ;; hkey-either") (find-efunctiondescr 'hkey-either) (find-efunction 'hkey-either) (find-efunction 'action-key) (find-efunction 'assist-key) Here are my first questions... 1. How does hyperbole know that when I open this file (find-fline "~/.emacs.d/elpa/hyperbole-7.0.2/DEMO") (find-hyperbolefile "DEMO") it has to fontify the strings like "<(button)>"? The file seems to be in fundamental mode to me... 2. Can you give me a sexp that will perform the same action as M-RET does when I type it on "<(button)>"? And on "<(keyboard macros)>"? And on "<(glossary)>"? Thanks in advance!!! Eduardo Ochs http://angg.twu.net/#eev ##### # # Bridge between Hyperbole and eev: e-mail 2 # 2019apr21 # ##### # «hyperbole-eev-mail-2» (to ".hyperbole-eev-mail-2") # https://github.com/edrx/eev/issues/1#issuecomment-485276834 Nope, action-key on these hbuttons <(button)> <(Smart Mouse Keys)> <(toggle-scroll-proportional)> is not the same as running these sexps (button) (Smart Mouse Keys) (toggle-scroll-proportional) in the file DEMO... and when I copied the <(...)>s to another file and try to type M-RET on them I get this "hypb:error": (Hyperbole Action Key): No action defined for this context; try another location. Hyperbole does look interesting, but I am getting the impression that our design principles are not only different, they are OPPOSITE! Let me copy here a paragraph that I sent to Stefan Monnier in a discussion a few weeks ago... I'll uppercase some parts for emphasis, and add some [...]s. "I've met many people over the years who have been Forth enthusiasts in the past, and we often end up discussing what made Forth so thrilling to use at that time - and what we can do to adapt its ideas to the computers of today. My personal impression is that Forth's main points were not the ones that I listed at the beginning of this section, and that I said that were easy to quantify; rather, what was most important was that NOTHING WAS HIDDEN, there were NO COMPLEX DATA STRUCTURES around with "don't-look-at-this" parts (think on garbage collection in Lua, for example, and Lua's tables - [in Lua] BEGINNERS NEED TO BE CONVINCED TO SEE THESE THINGS ABSTRACTLY, as the concrete details of the implementation are hard), and everything [in Forth] - code, data, dictionaries, stacks - were just linear sequences of bytes, that could be read and modified directly if we wished to. We had TOTAL FREEDOM, defining new words was quick, and experiments were quick to make; that gave us a sense of power that was totally different from, say, the one that a Python user feels today because he has huge libraries at his fingertips." (From: http://angg.twu.net/miniforth-article.html) My experience with eev is that people have very short attention spans. I have at most two minutes to show each of the basic principles - 1) "Lisp can be run from anywhere in Emacs", 2) "use <f8> on red-star lines to open a terminal running an interpreter and make it the target buffer, and <f8> on non-red-star lines to send these lines to the target", and I've tried to prepare material to use these 2 minutes, or 2+2 minutes at most, the best that I can... I've spent 6 HOURS on Hyperbole in the last days - about 2 of those writing these e-mails - and I still haven't found neither: 1) the code that fontifies the "<(...)>"s - though this message http://lists.gnu.org/archive/html/hyperbole-users/2016-07/msg00004.html MAY have a hint, 2) the function that processes the body of a "<(...)>" - I mean, I was able to find these, but I didn't go very far from there... (eek "M-h M-k M-RET ;; hkey-either") (find-efunctiondescr 'hkey-either) (find-efunction 'hkey-either) (find-efunction 'action-key) (find-efunction 'assist-key) 3) the list of regexps that should be at the core of this idea from <https://www.gnu.org/software/hyperbole/>: "Buttons and Smart Keys: A set of hyperbutton types which supply core hypertext and other behaviors. Buttons may be added to documents (explicit buttons) with a simple drag between windows, no markup language needed. Implicit buttons are patterns of regular text that Hyperbole recognizes and then uses to perform specified actions, e.g. bug#24568 displays the bug status information for that bug number." This is incredibly frustrating. You are probably not going to answer anything useful, and my attention window for learning Hyperbole will close. =( =( =( Cheers, Eduardo Ochs http://angg.twu.net/#eev P.S.: did you take a look at these section of the eev tutorials? In the third one I've included a link to a video - just watch it between "t=16s" and "t=30s". (find-eev-quick-intro "2. Evaluating Lisp") http://angg.twu.net/eev-intros/find-eev-quick-intro.html#2 (find-eev-quick-intro "3. Elisp hyperlinks") http://angg.twu.net/eev-intros/find-eev-quick-intro.html#3 (find-eev-quick-intro "6.1. The main key: <F8>") http://angg.twu.net/eev-intros/find-eev-quick-intro.html#6.1 https://www.youtube.com/watch?v=Lj_zKC5BR64&t=16s (find-eval-intro "7. Pos-spec-lists") http://angg.twu.net/eev-intros/find-eval-intro.html#7 ##### # # turn-off # 2022may27 # ##### # «turn-off» (to ".turn-off") # How to turn hyperbole off: # http://lists.gnu.org/archive/html/hyperbole-users/2016-07/msg00004.html ##### # # Hyperbole mailing lists # 2019apr21 # ##### # «hyperbole-mailing-lists» (to ".hyperbole-mailing-lists") # https://lists.gnu.org/archive/html/hyperbole-users/2019-04/msg00000.html Hyperbole for eev users Hi list, I am the author of eev - see: http://angg.twu.net/#eev http://angg.twu.net/eev-intros/find-eev-quick-intro.html and I am trying to build a "bridge" between eev and Hyperbole... If one loads eev with (package-install 'eev) (require 'eev-load) then each of the sexps below can be used as an elisp hyperlink... if eev-mode is active then they can be executed with just `M-e', but people who prefer to work with the eev-mode keymap turned off can execute them with `C-e C-x C-e' (obs: to run the main tutorial of eev, do this: `M-x eev-beginner')... but I'm digressing. The non-obvious sexps below are all elisp hyperlinks: (find-epackage 'hyperbole) (require 'hyperbole) (code-c-d "elpa" "~/.emacs.d/elpa/") (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-8.0.0/" "hyperbole") (find-elpafile "hyperbole-readme.txt") (find-elpafile "" "hyperbole") (find-hyperbolefile "DEMO") (find-hyperbolefile "DEMO" "Action Key is {M-RET}") (find-hyperbolefile "DEMO" "Assist Key is {C-u M-RET}") (find-hyperbolefile "DEMO" "Press the Action Key within this <(button)>") (find-hyperbolenode "") (find-hyperbolenode "Installation") (find-hyperbolenode "Buttons") (eek "M-h M-k M-RET ;; hkey-either") (find-efunctiondescr 'hkey-either) (find-efunction 'hkey-either) (find-efunction 'action-key) (find-efunction 'assist-key) This one opens the file "DEMO" in the Hyperbole directory and jumps to the first occurrence of the string "Press the Action Key within this <(button)>" in it: (find-hyperbolefile "DEMO" "Press the Action Key within this <(button)>") I am trying to understand what happens under the hood when I place the point on the string "<(button)>" and type the action key... the elisp hyperlinks below show some interesting things, (find-hyperbolefile "DEMO" "(bu") (find-hyperbolefile "DEMO" "(bu" '(eek "M-RET")) (find-hyperbolefile "DEMO" "(bu" '(eek "<<action-key>>")) (find-hyperbolefile "DEMO" "(bu" '(eek "C-h A")) (find-hyperbolefile "DEMO" "(bu" '(eek "<<hkey-help>>")) but I'm a bit stuck after this (caveat: I'm a newbie with less than 6 hours playing with Hyperbole!)... Let me try to formulate some precise questions. 1. This section of "HY-ABOUT" mentions "patterns": (find-hyperbolefile "HY-ABOUT" "1. Buttons and Smart Keys") (find-hyperbolefile "HY-ABOUT" "1. Buttons and Smart Keys" "patterns") My guess is that there is a list of pairs of regexps/actions somewhere, and that there is a (low-level) way to inspect that list, and to find the pattern that matches the current button and its associated action. How do I do that? 2. What is the hook (?) that fontifies the things like "<(button)>"? My guess it that it's `hproperty:but-create'. Is that right? I found that with: (find-hyperbolegrep "grep --color -nH -e hook *.el") (find-hyperbolegrep "grep --color -nH -e find-file-hook *.el") (find-efunctiondescr 'hproperty:but-create) (find-efunction 'hproperty:but-create) Thanks in advance!!! Eduardo Ochs http://angg.twu.net/#eev P.S.: This discussion started at: https://github.com/edrx/eev/issues/1 ##### # # hyperbole-videos # 2019jun26 # ##### # «hyperbole-videos» (to ".hyperbole-videos") # https://www.reddit.com/r/emacs/comments/by28x5/my_gnu_hyperbole_vision_quest_or_jupiter_and/ # https://www.youtube.com/channel/UCNRwswKKpjOlOVfFTS73P9A # https://www.youtube.com/watch?v=8lMlJed0-OM # https://www.youtube.com/watch?v=M3-aMh1ccJk&t=470s # (find-youtubedl-links "/sda5/videos/" "GNU_Hyperbole_-_Find_Web_Search" "8lMlJed0-OM" ".mp4" "hypsearch") # (find-video "/sda5/videos/GNU_Hyperbole_-_Find_Web_Search-8lMlJed0-OM.mp4") # (find-youtubedl-links "/sda5/videos/" "GNU_Hyperbole_-_HyControl_the_fast_frame_and_window_manager_for_GNU_Emacs" "M3-aMh1ccJk" ".mp4" "hyphyc") # (code-video "hyphycvideo" "/sda5/videos/GNU_Hyperbole_-_HyControl_the_fast_frame_and_window_manager_for_GNU_Emacs-M3-aMh1ccJk.mp4") # (find-hyphycvideo) # (find-hyphycvideo "0:00") # (find-hyphycvideo "17:12" "Toggle smart key debugging") # (find-hyphycvideo "19:30" "Override local keys") ##### # # hyperscope # 2019aug26 # ##### # «hyperscope» (to ".hyperscope") http://dougengelbart.org/content/view/154/86/ http://dougengelbart.org/content/view/216/000/#HyperScope ##### # # email-2020sep20 # 2020sep20 # ##### # «email-2020sep20» (to ".email-2020sep20") # https://lists.gnu.org/archive/html/hyperbole-users/2020-09/msg00001.html # (find-epackage 'hyperbole) # (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-7.1.2/" "hyperbole") # (find-hyperbolefile "") # (find-efunctiondescr 'hyperbole) # (find-hyperbolefile "DEMO") # (find-hyperbolefile "DEMO" "* Smart Keys") # (find-hyperbolefile "DEMO" "Press the Action Key within this") # (find-hyperbolenode "Installation") # (find-hyperbolenode "Installation" "(require 'hyperbole)") # (find-hyperbolefile "hyperbole.el" "(defun hkey-initialize ") # (find-hyperbolenode "Explicit Buttons") # (find-hyperbolenode "Explicit Buttons" ".hypb") # (find-hyperbolenode "Explicit Buttons" ".hypb" "within the same directory") # (find-hyperbolefile "hbdata.el" "hattr:filename") # (find-hyperbolefile "hbdata.el" "hattr:filename" ".hypb") # Re: Emacs NYC Video Release: Bring Your Text to Life the Easy Way with G Hi Jean: From the start, Hyperbole was designed as a toolkit to allow people to manage unstructured and semi-structured textual information, namely personaliz day-to-day information, that doesn't fit neatly in databases. Most of this information and the way people want to structure it is highly personal, so the custom button types and the information underlying the buttons would not typically be shared publicly. People wouldn't normally share their contact lists, emails or even personal writings nor the buttons within. What is public of course are the button and action types included with Hyperbole and associated demos/tutorials as you see in the DEMO file {C-h h d d} and potential applications listed in the Why Use Hyperbole writeup, {C-h h d w}. If the examples provided in the DEMO are insufficient for you to create your own Hyperbole-verse, please let us know what is missing. Basincally, you just create your global personal button file, HYPB, with {C-h h b p}, place explicit and named implicit buttons in here that you want to reference frequently, organizing it as an Emacs outline if you like, and then all of these buttons become global buttons automatically that you can reference from anywhere with {C-h h g a}. As you get more advanced, you embed buttons in other files including your hyrolo, {C-h h r a} and Koutlines, {C-h h k c}, both of which are documented in the Hyperbole manual. The Hyperbole manual presently lacks a section describing how to build your own buttons types as this is pretty simple for anyone who can program in Elisp because definitions are almost just like regular defuns (just look at "hibtypes.el" and "hactypes.el"). But as time allows, we plan to add this section. Hyperbole is an easy-to-use toolkit you mold to your needs, like simple Python scripts or functions for comparison. Although it has some pre-built uses, just as programming languages don't come with extensive applications as examples, neither does Hyperbole. If you would like to see one specific application, have a look at "hib-doc.el" in the Hyperbole distribution which shows how to implement a simple document-index that can display multi-media documents based on document ids. I think you'll find that most current uses are the simplest ones: activating implicit buttons in existing documents or shell output text, using HyRolo for contact management, structuring documents with Koutlines and looking up programming definitions or cross-references with the Action Key. Cheers, Bob ##### # # My e-mail to the Hyperbole mailing list in 2020sep21 # 2020sep21 # ##### # «my-email-2020sep21» (to ".my-email-2020sep21") # https://lists.gnu.org/archive/html/hyperbole-users/2020-09/msg00006.html # (defun e () (interactive) (find-es "hyperbole" "my-email-2020sep21")) # (defun u () (interactive) (eup "hyperbole" "my-email-2020sep21")) Hi Robert, I gave Hyperbole another try but I did not get very far... I think I'm in the category "If the examples provided in the DEMO are insufficient for you to create your own Hyperbole-verse, please let us know what is missing", so here are some questions - with lots of eev links to what I discovered; for help on the eev functions that I used visit the URL below and click on the function names. http://angg.twu.net/e/hyperbole.e.html#my-email-2020sep21 So: I installed hyperbole with `M-x list-packages' and then ran this sexp to define some functions to access the Hyperbole directory and the info file: (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-7.1.2/" "hyperbole") for example: (find-hyperbolefile "DEMO") (find-hyperbolefile "DEMO" "\n* Smart Keys") (find-hyperbolefile "DEMO" "Press the Action Key within this") (find-hyperbolenode "Installation") (find-hyperbolenode "Installation" "(require 'hyperbole)") According to "Installation" I can activate hyperbole for the current Emacs session by running this by hand: (require 'hyperbole) If I do that and I visit "DEMO" again, (find-hyperbolefile "DEMO" "Press the Action Key within this") then the strings "<(button)>" and "<(Smart Mouse Keys)>" will be highlighted. Running `M-x describe-text-properties' on them says: There is an overlay here: From 20344 to 20364 face hbut They are not "buttons" in the sense of: (find-node "(elisp)Buttons") in particular, they don't have a special keymap. I search for M-RET, and it turns out that it was installed in the _global_ keymap. I looked for the other basic keys of Hyperbole, (find-elongkey-links "M-RET ;; hkey-either") (find-elongkey-links "C-h h ;; hyperbole") (find-elongkey-links "C-h A ;; hkey-help") and I found that they are defined here: (find-hyperbolefile "hmouse-drv.el" "(defun hkey-either ") (find-hyperbolefile "hui-mini.el" "(defun hyperbole ") (find-hyperbolefile "hmouse-drv.el" "(defun hkey-help ") and installed in the global keymap by: (find-hyperbolefile "hyperbole.el" "(defun hkey-initialize ") I looked for a way to turn Hyperbole mode off, and I couldn't find it. It seems that `M-x hyperbole-toggle-bindings' can sort of do that, (find-hyperbolefile "hyperbole.el" "(defun hyperbole-toggle-bindings ") (find-hyperbolenode "Smart Key Bindings" "hyperbole-toggle-bindings") but I don't know how to turn off the thing that highlights strings like "<(button)>" and "<(Smart Mouse Keys)>". They are highlighted even in files where they are don't work... by a hook, I guess? if I type M-RET on them in the file in which I am writing this e-mail I get this error: (Hyperbole Action Key): No action defined for this context; try another location That's because they are "explicit buttons", it seems (?), and the directory in which I am editing this e-mail doesn't have a ".hypb" file. I was able to find more info about how these buttons work in these links, (find-hyperbolenode "Explicit Buttons") (find-hyperbolenode "Explicit Buttons" ".hypb") (find-hyperbolenode "Explicit Buttons" ".hypb" "within the same directory") (find-hyperbolefile "hbdata.el" "hattr:filename") (find-hyperbolefile "hbdata.el" "hattr:filename" ".hypb") (find-hyperbolefile ".hypb") (find-hyperbolefile ".hypb" "DEMO") (find-hyperbolefile ".hypb" "DEMO" "button") (find-hyperbolefile ".hypb" "DEMO" "Smart_Mouse_Keys") but I couldn't find - yet - a function that would show me lots of information about the explicit button at point without following it. OOPS, UPDATE: it seems that typing C-h A on a button would sort of do that - I need to spend some time learning to read its output. Another problem: the DEMO file refers to some commands that start with C-h h - for example: (find-hyperbolefile "DEMO" "HY-ABOUT" "C-h h d a") (find-hyperbolefile "DEMO" "Hyperbole Glossary of terms" "C-h h d g") Typing C-h h brings up a menu in the minibuffer that is quite nice to navigate, but in which most tools that are familiar to me don't work... for example, if I type C-x 4 C-h I get a buffer that says this, Global Bindings Starting With C-x 4: key binding --- ------- C-x 4 C-f find-file-other-window C-x 4 C-o display-buffer (...) and I can use this sexp to go back to that listing whenever I want: (eek "C-x 4 C-h") but `eek' doesn't work with Hyperbole's C-h h - for example, this just inserts an `a': (eek "C-h h d a") and my default way of creating hyperlinks to an interesting key sequence stops at `C-h h'... (find-elongkey-links "C-h h ;; hyperbole") (eek "M-h M-k C-h h ;; hyperbole") I'll have to find another way to create hyperlinks to key sequences like `C-h h d a' and to the function bound to it - possibly by pointing to code in hui-mini.el... (find-hyperbolefile "hui-mini.el" "(defun hyperbole ") (find-hyperbolefile "hui-mini.el" "(defun hyperbole-minibuffer-menu ") That's it for the moment. I think that the chances of other people finding Hyperbole difficult to learn for reasons similar to mine are tiny, but I thought that I should report all this anyway... and any hints would be welcome, of course... Cheers! Eduardo Ochs http://angg.twu.net/emacsconf2019.html http://angg.twu.net/eev-intros/find-emacs-keys-intro.html http://angg.twu.net/eev-intros/find-eev-intro.html#1 ##### # # koutline # 2020sep27 # ##### # «koutline» (to ".koutline") # (require 'hyperbole) # (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-7.1.2/" "hyperbole") # (find-hyperbolefile "HY-ABOUT") # (find-hyperbolefile "HY-ABOUT" "1. Buttons and Smart Keys") # (find-hyperbolefile "DEMO") # (find-hyperbolefile "DEMO" "demonstration of the Koutliner") # (find-hyperbolefile "DEMO" "C-h h k e") # (find-hyperbolefile "hui-mini.el" "Kotl>") # (find-hyperbolefile "hui-mini.el" "Kotl>" "Examp") # (find-hyperbolefile "kotl/kotl-mode.el" "defun kotl-mode:example ") # (find-hyperbolenode "Koutliner") # (find-hyperbolenode "Koutliner Keys") # (find-hyperbolenode "Koutliner Keys" "kotl-mode:example") # (find-fline "~/EXAMPLE.kotl") ##### # # Bring Your Text to Life the Easy Way with GNU Hyperbole # 2020sep27 # ##### # «bring-your-text-to-life» (to ".bring-your-text-to-life") # https://emacsnyc.org/2020/08/13/bring-your-text-to-life-the-easy-way-with-gnu-hyperbole.html # https://www.reddit.com/r/emacs/comments/i9kscx/emacs_nyc_video_release_bring_your_text_to_life/ # https://www.youtube.com/watch?v=nC1eTgZE1oA # (code-video "bythyperbolevideo" "/sda5/videos/Bring_Your_Text_to_Life_the_Easy_Way_with_GNU_Hyperbole-nC1eTgZE1oA.webm") # (find-bythyperbolevideo) # (find-bythyperbolevideo "0:00") # (find-bythyperbolevideo "1:16") # (find-bythyperbolevideo "2:50" "Engelbart") # (find-bythyperbolevideo "5:10" "Why should you use") # (find-bythyperbolevideo "6:57" "Components") # (find-bythyperbolevideo "9:53" "Installation") # (find-bythyperbolevideo "11:03" "Mouse") # (find-bythyperbolevideo "11:52" "So") # (find-bythyperbolevideo "15:28" "Buttons") # (find-bythyperbolevideo "16:23" "Implicit buttons (to bug#5320)") # (find-bythyperbolevideo "16:35" "6 lines of code") # (find-bythyperbolevideo "17:00" "Three categories of buttons") # (find-bythyperbolevideo "18:19" "arbitrary actions") # (find-bythyperbolevideo "19:06" "a few common examples (pathnames, key series)") # (find-bythyperbolevideo "19:53" "global buttons") ##### # # "Hyperbole and eev" - my email (2020sep27) # 2020sep27 # ##### # «hyp-and-eev-2020sep27» (to ".hyp-and-eev-2020sep27") # https://lists.gnu.org/archive/html/hyperbole-users/2020-09/msg00009.html rsw # https://lists.gnu.org/archive/html/hyperbole-users/2020-09/msg00013.html edrx # https://mail.google.com/mail/ca/u/0/#sent/QgrcJHrnsbvVQCkPzjXcrNBgnlLGMqwvPjV Hi Robert, I will try to answer all your e-mails in a single e-mail - in a new thread. Yor e-mails are here: https://lists.gnu.org/archive/html/hyperbole-users/2020-09/index.html#00008 First: thanks for the hints, things are starting to make sense to me. We are clearly using different notions of simplicity - eev is like a Volkswagen Beetle, in the sense that if you open its lid everything is trivial to figure out and to fix, hack, and extend. It's nice that you said > I really, really recommend that you try to use Hyperbole without > initially mixing it with eev, as I think you will find that > Hyperbole already contains much of what you need to simplify eev and > tie it to a broader Emacs ecosystem. because that sort of allows me to ask you to try eev! =) =) =) I am not going to ask you to try eev without Hyperbole, though - I tried to 1. make eev as non-invasive as possible - see: http://angg.twu.net/eev-intros/find-eev-intro.html#1 2. make it trivial to navigate by people who have very short attention spans and who have just a few spare minutes to play with it. Here are the instructions: a. install eev with M-x list-packages, b. run M-x eev-beginner, c. learn how to use M-e and M-j to navigate the docs. See: http://angg.twu.net/eev-intros/find-emacs-keys-intro.html#1 Let me copy that section here: 1. Basic keys (eev) =================== The most basic keys of eev are: M-e - to follow a hyperlink. Mnemonic: "(e)valuate"/"(e)xecute". See: (find-eev-quick-intro "2. Evaluating Lisp") (find-eev-quick-intro "3. Elisp hyperlinks") M-j - to jump to certain predefined places. In particular, `M-j' takes you to a buffer with basic help and a list of jump targets. See: (find-eev-quick-intro "7.2. The list of eejump targets") `M-2 M-j' takes you to this help page. `M-5 M-j' takes you to: (find-eev-quick-intro) M-k - to go back. Mnemonic: "(k)ill buffer". See: (find-eev-quick-intro "3. Elisp hyperlinks" "M-k") By the way, you asked me what this line of my e-mail does: (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-7.1.2/" "hyperbole") The answer is here: (find-eev-quick-intro "9.1. `code-c-d'") You can see the code that it runs by running this: (find-code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-7.1.2/" "hyperbole") We are following different design principles. In my view, or, in eev's view, Hyperbole uses an awful amount of markup syntax, and it keeps the Elisp code too far from the user. Let me give you two examples, and ask you a question about a technical point in which I am stuck. I am watching your video "Bring Your Text to Life the Easy Way with GNU Hyperbole" http://www.youtube.com/watch?v=nC1eTgZE1oA and I am indexing it with the tricks described here: http://angg.twu.net/eev-intros/find-audiovideo-intro.html#4.3 The video made me understand that Hyperbole's action key works on {Implicit Buttons}, <(Explicit Buttons)>, and <(Global Buttons)> - from 17:00 in the video onwards - and from 19:06 onwards you show that the action key also works on pathnames enclosed in double quotes, in a way that supports lots of abbreviations. That's REALLY nice - but let me point to you that eev's hyperlinks can to point to arbitrary positions in files, manpages, PDFs, etc, and I don't know if the "#" syntax in Hyperbole's hyperlinks can do that... see: http://angg.twu.net/eev-intros/find-refining-intro.html http://angg.twu.net/eev-intros/find-pdf-like-intro.html#4 Ok, time for my technical question. Apparently this Hyperbole button {C-h h d a} should have essentially the same action as: (eek "C-h h d a") but my `eek' sexp just inserts an "a". It's trivial to inspect the innards of how the function eek works - we just have to search for its source code, and it is just this: (defun eek (str) (interactive "sKeys: ") "Execute STR as a keyboard macro. See `edmacro-mode' for the exact format.\n An example: (eek \"C-x 4 C-h\")" (execute-kbd-macro (read-kbd-macro str))) Your key sequence buttons work well on key sequences like {C-h h d a}, but I couldn't find a function that on receiving the string like "C-h h d a" would execute it as a key sequence, like this would do, (execute-kbd-macro (read-kbd-macro "C-h h d a"))) but without the bugs... I grepped for "key sequence" in the Hyperbole source directory and created a link to the result of that grep, (find-hyperbolegrep "grep --color -niH --null -e 'key sequence' *.el") to be able to go back to that easily. I guess that the function that I am looking for is in: (find-hyperbolefile "hib-kbd.el") but I couldn't find it... and typing C-h A didn't help me much. I have the feeling that C-h A would be better if it would say which function the action key would call - I mean, something more precise than saying "hui:hbut-act". Cheers, Eduardo Ochs http://angg.twu.net/emacsconf2019.html ##### # # hyp-and-eev-2020sep30 # 2020sep30 # ##### # «hyp-and-eev-2020sep30» (to ".hyp-and-eev-2020sep30") # (require 'hyperbole) # (find-efunction 'actypes::kbd-key) # (find-efunction 'hact) You want this: (actypes::kbd-key "C-h h d a") because to translate the 'defact' 'kbd-key' to an actual function, you prefix it with 'actypes::'. Or you could simply use the generalized form of an implicit button which replaces the outer parens of an sexp with angle brackets: <kbd-key "C-h h d a"> Hyperbole keeps it simple. (...) Hmm. When I use {C-h A} on {C-h h d a} it shows me both the implicit button type: categ: ibtypes::kbd-key and the action type: actype: kbd-key Maybe we should show the actypes:: prefix too so you can more easily know what function to run manually but in the Hyperbole world you invoke actypes with the hact macro, as in: (hact 'kbd-key "C-h h d a") ##### # # GNU Hyperbole V8: Rocket Through Your Information with Buttons (Emacs-Elements) # 2021may09 # ##### # «rocket-buttons» (to ".rocket-buttons") # https://www.youtube.com/watch?v=UMANdTBvQUY ##### # # hyp-and-org-2022jun20 # 2022jun20 # ##### # «o-h-and-e-524» (to ".o-h-and-e-524") # «hyp-and-org-2022jun20» (to ".hyp-and-org-2022jun20") # https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00524.html edrx # https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00528.html juan Hi Russell, Some years ago I tried to integrate Hyperbole and eev and 1) I failed miserably, and 2) I ended up with the impression that Hyperbole is meant to be "used", not to be "hacked"... for example, in Hyperbole the action of a button like this, {C-h h d a} is to emulate what happens when the user types `C-h h d a'. This button works exactly as expected; eev implements something similar, but in a very simplistic, and slightly buggy, way: when we run this in eev (eek "C-h h d a") it simply runs this, (execute-kbd-macro (read-kbd-macro "C-h h d a")) that just inserts an "a". The details are here, in the second part, after the blank lines: https://lists.gnu.org/archive/html/hyperbole-users/2020-09/msg00013.html Hyperbole has some amazing features, but its code needs to be refactored to make more parts of it easier to use from Lisp... someone needs to do that, and this someone won't be me, as I'm burnt out. =( My links about my attempts to learn Hyperbole are here: http://angg.twu.net/hyperbole.html [[]], Eduardo Ochs http://angg.twu.net/2021-org-for-non-users.html ##### # # hyp-disable-2022jun23 # 2022jun23 # ##### # «hyp-disable-2022jun23» (to ".hyp-disable-2022jun23") # https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00632.html Hi Robert, can you show us a sexp that will disable Hyperbole completely, and that we can execute with our favorite variants of `C-x C-e'? I know that this page (info "(hyperbole)Default Hyperbole Bindings") has this paragraph, {C-h h} {C-h h X} Hyperbole Mini Menu: Enable Hyperbole minor mode and invoke the Hyperbole minibuffer menu, giving access to many Hyperbole commands. This is bound globally. Use {C-h h X} to close the Hyperbole minibuffer menu and disable Hyperbole minor mode. and apparently these sexps toggle Hyperbole minor mode, (hyperbole-mode 1) (hyperbole-mode 0) but even when I toggle it off the global binding for `C-h h' remains active... Thanks in advance. My notes on Hyperbole are here, http://angg.twu.net/hyperbole.html and there is some material on why I find Hyperbole too "magic" in these two links: http://angg.twu.net/2021-org-for-non-users.html http://angg.twu.net/eev-wconfig.html [[]], Eduardo Ochs http://angg.twu.net/#eev ##### # # on-and-off # 2022jun26 # ##### # «on-and-off» (to ".on-and-off") (package-initialize) (package-refresh-contents) (package-install 'hyperbole) # (find-epackage-links 'hyperbole "hyperbole" t) # (find-epackage 'hyperbole) # (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-8.0.0/") # (find-hyperbolefile "") # (find-node "(hyperbole)") # (find-node "(hyperbole)Implicit Button Types") # (find-node "(hyperbole)Manual Overview" "C-h h d d") # (find-hyperbolefile "FAST-DEMO") # (find-hyperbolefile "FAST-DEMO" "Introductory Videos") # (find-youtubedl-links "/sda5/videos/" "GNU_Hyperbole_-_Overview_and_Demo" "WKwZHSbHmPg" ".webm" "hypoandd") # (code-video "hypoanddvideo" "/sda5/videos/GNU_Hyperbole_-_Overview_and_Demo-WKwZHSbHmPg.webm") # (find-hypoanddvideo "0:00") # (find-yttranscript-links "hypoandd" "WKwZHSbHmPg") "-subr.el" "subr.el" {C-h h d d} # (package-delete (ee-package-desc 'hyperbole)) # (find-efunctiondescr 'hyperbole) # (find-efunction 'hyperbole) # (find-efunctiondescr 'hyperbole-mode) # (find-efunction 'hyperbole-mode) # (find-evariable-links hyperbole-mode-map) # (find-hvariable 'hyperbole-mode-map) # (find-ekeymapdescr hyperbole-mode-map) # (find-hyperbolegrep "grep --color=auto -nH --null -e global-set-key *.el") # (find-efunctiondescr 'hkey-initialize) # (find-efunction 'hkey-initialize) # (find-efunction 'hkey-initialize "(vector help-char ?h)") # (find-evariable-links hkey-init) # (find-evardescr 'hkey-init) # (find-evariable 'hkey-init) # (find-customizegroup 'hyperbole) # (find-customizegroup 'hyperbole-keys) # (find-customizevariable 'hkey-init) ##### # # How M-RET on a <...> button runs ibtypes::action # 2022jun28 # ##### # «M-RET-on-action-button» (to ".M-RET-on-action-button") # https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00757.html Edrx 3 # https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00765.html Rsw 7 # (find-angg ".emacs" "ee-eval-defun-test") (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) ##### # # Org, Hyperbole, and eev - find-here-links # 2022jun28 # ##### # «o-h-and-e-738» (to ".o-h-and-e-738") # https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00738.html 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 ##### # # Org, Hyperbole, and eev - something useful to say # 2022jun28 # ##### # «o-h-and-e-742» (to ".o-h-and-e-742") # https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00742.html 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 ##### # # Org, Hyperbole, and eev - let me propose three tasks # 2022jun28 # ##### # «o-h-and-e-750» (to ".o-h-and-e-750") # https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00750.html 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 ##### # # Org, Hyperbole, and eev - That's bad news # 2022jun28 # ##### # «o-h-and-e-757» (to ".o-h-and-e-757") # https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00757.html # See also: https://lists.gnu.org/archive/html/eev/2022-06/msg00014.html 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 ##### # # Org, Hyperbole, and eev - my message about M-RET # 2022jun28 # ##### # «o-h-and-e-801» (to ".o-h-and-e-801") # https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00801.html 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 ##### # # Org, Hyperbole, and eev - my message about tests in comments # 2022jun28 # ##### # «o-h-and-e-802» (to ".o-h-and-e-802") # https://lists.gnu.org/archive/html/emacs-orgmode/2022-06/msg00802.html 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 ##### # # hypobole # 2022jun28 # ##### # «hypobole» (to ".hypobole") # https://www.reddit.com/r/emacs/comments/vied1y/gnu_hypobole_10/ ##### # # 2024 # 2024dec08 # ##### # «2024» (to ".2024") # (find-epackage-links 'hyperbole "hyperbole" t) # (code-c-d "hyperbole" "~/.emacs.d/elpa/hyperbole-20241126.917/") # (find-hyperbolefile "") # https://emacsconf.org/2024/talks/hyperbole/ # (find-lynx "https://emacsconf.org/2024/talks/hyperbole/") # (find-fline "~/LOGS/2024dec08.emacsconf" "kbd-key:key-series-to-events") # (find-efunction 'kbd-key:key-series-to-events) # (find-efunction 'kbd-key:kbd) # (find-efunction 'kbd-key:parse) # (find-efunction 'edmacro-parse-keys) # (find-evardescr 'unread-command-events) # (find-elnode "Index" "* unread-command-events:") (defun kbd-key:key-series-to-events (key-series) "Insert the KEY-SERIES as a series of keyboard events. The events are inserted into Emacs unread input stream. Emacs then executes them when its command-loop regains control." (setq unread-command-events (nconc unread-command-events ;; Cons t here to ensure events ;; are added to command-keys. (mapcar (lambda (e) (cons t e)) (listify-key-sequence (kbd-key:kbd key-series)))))) (mapcar (lambda (e) (cons t e)) (listify-key-sequence (kbd-key:kbd "M-5 M-j"))) (kbd-key:kbd "M-5 M-j") (listify-key-sequence (kbd-key:kbd "M-5 M-j")) (execute-kbd-macro (read-kbd-macro "M-5 M-j") # (find-efunction 'eek) # (find-efunction 'read-kbd-macro) # (find-efunction 'execute-kbd-macro) # (find-elnode "Index" "* unread-command-events:") # (find-egrep "grep --color=auto -nH --null -e listify-key-sequence *.el */*.el") * (eepitch-shell) * (eepitch-kill) * (eepitch-shell) # (find-fline "/tmp/ec-hyp/") rm -Rv /tmp/ec-hyp/ mkdir /tmp/ec-hyp/ cd /tmp/ec-hyp/ wget https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--intro.webm wget https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main--chapters.vtt wget https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.vtt wget https://media.emacsconf.org/2024/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.webm # (code-video "echypvideo" "/tmp/ec-hyp/emacsconf-2024-hyperbole--fun-things-with-gnu-hyperbole--mats-lidell--main.webm") # (find-echypvideo "0:00") {C-h h d d} https://www.youtube.com/watch?v=R3G-bLHz_S0 # (find-hyperbolegrep "grep --color -niH --null -e 'hycontrol' *.el") # (find-hyperbolegrep "grep --color -niH --null -e 'key sequence' *.el") # (find-hyperbolegrep "grep --color -niH --null -e 'load-path' *.el") # (find-hyperbolefile "hversion.el" "(locate-file file load-path") # (find-bythyperbolevideo "17:00" "Three categories of buttons") https://www.reddit.com/r/emacs/comments/vhc8l1/gnu_hyperbole_many_have_heard_of_it_but_what_does/ https://www.reddit.com/r/emacs/comments/jk3cn0/daily_ways_gnu_hyperbole_helps_me_stay_in_flow/ Doug Engelbart Institute - Boosting mankind's capability for coping with complex, urgent problems https://www.dougengelbart.org/ Draft OHS-Project Plan https://web.archive.org/web/20070704185333/http://www.bootstrap.org/augdocs/bi-2120.html TECHNOLOGY TEMPLATE PROJECT OHS Framework https://www.dougengelbart.org/content/view/110/460/ Addressing Hyperdocument Content And Structure https://www.dougengelbart.org/content/view/110/460/#2b1 Toward High-Performance Organizations A Strategic Role for Groupware https://www.dougengelbart.org/content/view/116/#7j About Dynamic Knowledge Repositories (DKR) https://www.dougengelbart.org/content/view/190/163/ https://www.reddit.com/r/emacs/comments/n3oqle/gnu_hyperbole_v8_rocket_through_your_information/ https://lists.gnu.org/archive/html/hyperbole-users/2022-05/msg00000.html release 8 * hyperbole: hyrolo https://github.com/termitereform/JunkPile/blob/master/HyperboleNotes2.org https://tilde.town/~ramin_hal9001/articles/intro-to-hyperbole.html # Answer to Uzibalqa: # https://lists.gnu.org/archive/html/help-gnu-emacs/2022-08/msg00188.html # (code-video "hoanddvideo" "/sda5/videos/GNU_Hyperbole_-_Overview_and_Demo-WKwZHSbHmPg.webm") # (find-hoanddvideo "0:00") # Transcript: # (find-yttranscript-links "hoandd" "WKwZHSbHmPg") https://www.reddit.com/r/emacs/comments/bua5ex/gnu_hyperbole_703_is_released_and_ready_for_action/ https://www.reddit.com/r/emacs/comments/vhc8l1/gnu_hyperbole_many_have_heard_of_it_but_what_does/ # Local Variables: # coding: utf-8-unix # End: