Re: id links in non-org buffers

2023-06-26 Thread Robert Weiner
The current pre-release package of Hyperbole from the elpa-devel archive
will display any Org ID (typically a UUID) or Org Roam ID referent given an
ID in any buffer.  Simply press M-RET on the ID with Hyperbole active and
the referent/definition is displayed in another window or frame (whatever
Hyperbole display setting you have).  Clean and simple.  Give it a try.

-- rsw


On Fri, Jun 23, 2023 at 1:02 PM Ihor Radchenko  wrote:

> Samuel Wales  writes:
>
> > will any package highlight or follow org id in non-org?
>
> How would IDs look like in non-org?
>
>


Re: [BUG] hyperbole action key on path name results in org-element-cache warning [9.6-pre (release_9.5.5-997-ge58bd0 @ /home/grfz/src/org-mode/lisp/)]

2022-12-11 Thread Robert Weiner
Hi Ihor:

So if we want to determine the Org type of an element outside of an Org
buffer (when using org-type minor modes for example), how would we change
this 'let' code:

 (let* ((context
 ;; Only consider supported types, even if they are not
 ;; the closest one.
 (org-element-lineage
  ;; Next line can trigger an error when `looking-at' is called
  ;; with a `nil' value of `org-complex-heading-regexp'.
  (org-element-context)
  '(clock footnote-definition footnote-reference headline
inlinetask link timestamp)
  t))
(type (org-element-type context))
 ...)

Thanks,

Bob

On Sat, Oct 22, 2022 at 3:53 AM Ihor Radchenko  wrote:

> Gregor Zattler  writes:
>
> > Dear org-mode and hyperbole developers, hitting hyperbole's
> > action-key with point in "~/src/org-mode/contrilb/lisp" in a
> > *Pp Eval Output* buffer holding my complete load-path
> > resulted in this org-element--cache warning:
> >
> >  ■  Warning (org-element-cache): org-element--cache: Org parser error in
> *Pp Eval Output*::5288. Resetting.
> >  The error was: (error "rx ‘**’ range error")
> >  Backtrace:
> > "  backtrace-to-string(nil)
> >   org-element-at-point()
> >   org-element-context()
> >   hsys-org-link-at-p()
>
> This is a hyperbole bug.
> The latest version of Org no longer supports calling
> org-element-at-point in non-Org buffers. Previously it worked by
> accident and did not throw an error.
>
> I recommend using regexp constants from Org to match against org-like
> constructs outside Org mode buffers.
>
> --
> Ihor Radchenko // yantar92,
> Org mode contributor,
> Learn more about Org mode at .
> Support Org development at ,
> or support my work at 
>
>


Re: watch YT videos through in Emacs [Was: Interest in an Org video meetup?]

2022-10-12 Thread Robert Weiner
>  More info on my blog in Spanish (if anyone is interested, I can
translate it)

Yes, please translate it to English.

-- rsw


On Wed, Oct 12, 2022 at 6:24 AM Juan Manuel Macías 
wrote:

> Ihor Radchenko writes:
>
> > Quiliro Ordóñez  writes:
> >
> >> Hola Juan Manuel.
> >>
> >>> There is the YouTube option, which I imagine no one would like (me
> >>> neither). The only thing in its favor is that Invidious can be used to
> >>> watch the videos. BTW, I watch YT videos through Invidious in Emacs,
> >>> with the Ytel package and EMMS/MPV.
> >>
> >> Nice.  Is there a guide to do this specificly?
> >
> > I simply use
> >
> > #+begin_src bash :tangle ~/.local/bin/qutebrowser-call.sh :shebang
> #!/bin/bash
> > URL="$1"
> >
> > if echo "$URL" | grep "youtube.com"; then
> > # URL="$(echo "$URL" | sed -r 's/\\(www\\)?youtube\.com/
> invidious.namazso.eu/')"
> > if [[ ! -z $(echo "$URL" | grep "/watch") ]]; then
> >   mpv $URL && exit;
> > fi
> > fi
> >
> > if echo "$URL" | grep "ted.com/talks"; then
> >   mpv $URL && exit;
> > fi
> >
> > # if echo "$URL" | grep "reddit.com"; then
> > # URL="$(echo "$URL" | sed -rE 's/www\.reddit\.com/libredd.it/')"
> > # fi
> >
> > if echo "$URL" | grep "bilibili.com"; then
> > mpv $URL && exit;
> > fi
> >
> > grep "$URL" ~/.data/web-mirror/sources/* >/dev/null 2>&1 &&\
> > ARCHIVE_DIR="$(echo "$URL" | archivebox-cmd list 2>/dev/null | tail
> -n1 | cut -d' ' -f1  | sed -r 's|/data|~/.data/web-mirror|')"
> >
> > if [[ ! -z "$ARCHIVE_DIR" ]]; then
> > [[ -f "${ARCHIVE_DIR}/singlefile.html" ]] &&
> URL="${ARCHIVE_DIR}/singlefile.html";
> > fi
> >
> > #from
> https://github.com/qutebrowser/qutebrowser/blob/master/scripts/open_url_in_instance.sh
> > _url="$URL"
> > _command=":later 4000 :jump-mark last-position"
> >
> > qutebrowser "${_command}" ":spawn -u untrack-url -r -O ${_url}"
> >
> > #+end_src
> >
> > and my mpv is configured to use youtube-dl.
>
> In this short video I show an example of my procedure to watch youtube
> videos without leaving Emacs:
>
> https://cloud.disroot.org/s/X3cfi2orT38CPyM
>
> I use:
>
> 1. Helm-google-suggest (set to use duckduckgo)
>
> 2. Ytel (based on elfeed). With a few hacks that I have added, in order
> to:
>
>   - Display thumbnails in the searches.
>
>   - Watch the video at point (via invidious) with EMMS/MPV,
> configured with yt-dlp, which is a fork of youtube-dl that works
> much better.
>
>   - Download the video at point with yt-dlp (full video or only audio)
>
>   - Create a bookmark of the video with org-capture
>
> More info on my blog in Spanish (if anyone is interested, I can translate
> it):
>
> https://gnutas.juanmanuelmacias.com/ytel_invidious.html
>
> Best regards,
>
> Juan Manuel
>
>


Re: SQLite for contacts and relations to Org - Re: contact management in emacs

2022-10-10 Thread Robert Weiner
You want a CRM system which to me is a very different creature and much more 
complex than a contact manager, meant to lookup fairly static information about 
people.  HyRolo was built to allow freeform contact management and to 
specifically avoid the typical, limiting field-based techniques in common use.

It would be a small extensio  to allow you to apply operations to a set of 
filtered contacts you have found.

-- Bob

> On Oct 10, 2022, at 7:39 PM, Jean Louis  wrote:
> 
> 
> 
> When anyway structured information such as people names, properties,
> their communication lines



Re: stability of toc links

2022-10-10 Thread Robert Weiner
I missed the beginning of this; what exactly are you looking for?  If you don’t 
want ids attached to the headlines that go into the toc, are you asking for 
code that automatically updates the toc on any change to individual headlines 
inthe document body?

It would probably be easier to just have a command like Texinfo has that 
regenerates its toc-like menus.

-- rsw

> On Oct 9, 2022, at 9:38 PM, Samuel Wales  wrote:
> 
> [i should clarify the clarification as i do not want it to seem like
> saying i already covered that was the only point for no reason.  what
> i meant is to provide context for those who are stumbling upon this
> long thread.
> 
> it seems an active topic and a lot of custom id solutins were
> presented and while custom id is a great feature, and provides a great
> solution for those who want it, and in many cases is a great solution,
> it is definitely not for /everybody/ in all cases, especially the
> particular case of a large document where /lots/ of headers might
> potentially be linked to by users, such as my original example in op,
> a /long/ blog post.  and thus lots of properties drawers and custom id
> identifiers would be created.  custom id is not a solution for me, for
> toc or any other links that i desire to be stable /automatically/,
> which is why i addressed them and id in my op and said "short of".
> 
> for clarity, according to my sensibilities, which others obviously
> will differ on, custom id is more suitable for the document author to
> use manually, and reasonably sparingly, and with particularly
> meaningful and carefully chosen names.  a custom id name refers to an
> internal link that was chosen out of many, and refers to it with
> semantic value attached.
> 
> in other words, to me, in most cases, custom id is not for code to
> generate.  in my own case, code would potentially create an enormous
> number of undesired properties drawers with custom ids and /also/ make
> it so that it is no longer as much of a semantically valuable feature
> that custom id were added manually sparingly and with meaningful names
> for  particularly potent internal links to draw the reader's or
> author's attention to or be straightforwardly searchable.  if that
> makes any sense there.  :)
> 
> [as for drawers, as an aside: to my sensibilities, too many make the
> document author wonder if they contain anything significant, require
> opening them to make sure they are ok, and take up space in the emacs
> window which in my case is highly limited.  also, they possibly reduce
> efficiency as at least in the past drawers were highly inefficient in
> org.  these issues probably do not apply to everybody.]
> 
> so that is why i said in the op "short of adding custom id or id to
> everything", and why i clarified that i mentioned what you brought up
> in the op.  sometimes i effectively assume that all my implications
> are understood when in fact i am supposed to spell them out but i am
> limited in computer use so i sometimes do not.  perhaps it helps
> clarify.]
> 
> 
>> On 10/9/22, Samuel Wales  wrote:
>>> On 12/8/20, Tom Gillespie  wrote:
>>> It sounds like you are looking for the CUSTOM_ID property.
>> 
>> just for clarity, i addressed this in my original post when i said
>> "short of adding custom id or id to everything".
>> 
> 
> 
> -- 
> The Kafka Pandemic
> 
> A blog about science, health, human rights, and misopathy:
> https://thekafkapandemic.blogspot.com
> 



Re: [HELP] Fwd: Org format as a new standard source format for GNU manuals

2022-10-10 Thread Robert Weiner
I would just like to point out that anyone familiar with writing a 
Texinfo-format manual who wants to combine this with Org mode would likely just 
want to embed Org constructs, like Org tables in the manual; not to use Org as 
a formatter that exports individual source blocks to form a Texinfo manual 
(literate programming style).  This is because their focus while writing will 
be on the manual and its formatting, not on Org markup that exports to another 
markup.

I hope this is considered in your strategy.

-- rsw

> On Oct 8, 2022, at 6:38 PM, Richard Stallman  wrote:
> 
> [[[ To any NSA and FBI agents reading my email: please consider]]]
> [[[ whether defending the US Constitution against all enemies, ]]]
> [[[ foreign or domestic, requires you to follow Snowden's example. ]]]
> 
>> The latter. We currently need a new syntax element that will allow all
>> the things available in Texinfo markup syntax.
> 
>> We have decided that we do need such new syntax. We are discussing how
>> the new syntax will look like. We will implement the syntax in future.
>> Once implemented, the new syntax will open the road to add Texinfo
>> markup structures into Org export backends.
> 
> I'm glad you are working on this.
> 
> -- 
> Dr Richard Stallman (https://stallman.org)
> Chief GNUisance of the GNU Project (https://gnu.org)
> Founder, Free Software Foundation (https://fsf.org)
> Internet Hall-of-Famer (https://internethalloffame.org)
> 
> 
> 



Re: Org, Hyperbole, and eev

2022-10-10 Thread Robert Weiner
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  wrote:
> 
> * Eduardo Ochs  [2022-10-08 03:28]:
>>> On Thu, 29 Sept 2022 at 06:22, Jean Louis  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  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  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/



Re: SQLite for contacts and relations to Org - Re: contact management in emacs

2022-10-10 Thread Robert Weiner
Hi Jean:

A few thoughts.

1. Although I understand you do a great many things with your
database-backed Hyperscope system and I work with RDBMSes every day, I
don't really see great value in what you have shown in the context of
contact management when compared to the already existing HyRolo or
org-contacts.  We can easily add, delete, import and export contacts, we
just follow very simple conventions in creating our contacts.  We can
easily email contact files and have people apply text processing tools to
them, so it would help if you just showed examples of something that Emacs
really lacks before suggesting wrapping everything into a database system,
as I know you are a very smart guy.

2. Years ago as part of my stab at an Emacs-based IDE, InfoDock (find it on
Sourceforge), I also wrote an in-memory, file-based but fully relational
database.  The main point of which was to demonstrate direct manipulation
querying of relational tables via simple mouse clicks/key presses on
screen.  For simple queries, I found this very powerful and dirt simple for
people to do.  If that were of interest, someone could take the existing
code under infodock/id-lisp/rdb and interface it to SQLite pretty easily I
would expect and then you would have an interesting Emacs interface without
having to master SQL for basic table analysis.

-- rsw



On Mon, Oct 10, 2022 at 6:12 AM Jean Louis  wrote:

> * Quiliro Ordóñez  [2022-10-09 22:10]:
> > I agree.  But the end-user did not construct this program.  It was you.
> > I coould learn how to install it.  Then, I should teach the end-user to
> > use it.  But the program was not made or installed by the end-user.  I
> > might be able to teach the end-user to modify it.  But I doubt it.
>
> I will make a package so that you just install it and can start
> managing people.
>
> > What I mean is that end-users must have an easy entry point.  Of course
> > that ease must not hide innner workings because that would disempower
> > the end-user.  How do you propose it could be implemented? (if you agree
> > it should be done this way, of course)
>
> Inner workings are pretty much hidden unless user is programmer. Emacs
> is difficult, then there is underlying Emacs Lisp, then C language,
> then operating system, and stuff.
>
> Maybe you mean somthing else with inner workings?
>
> > > I have actually shown to you how it works, so you have to imagine that
> > > all that may be part of the package. Especially with SQLite databases
> > > there is nothing to configure.
> >
> > Not much to do.  Just installing SQLite and then the program you
> > propose.
>
> I did not try any SQLite package, just used the built-in functions in
> Emacs development version. Which packag did you install?
>
> --
> Jean
>
> Take action in Free Software Foundation campaigns:
> https://www.fsf.org/campaigns
>
> In support of Richard M. Stallman
> https://stallmansupport.org/
>
>


Re: Org and Hyperbole

2022-10-08 Thread Robert Weiner
We had object-based, multi-media files with Engelbart's NLS/Augment
system.  We had relational databases way before the web.

But here we are in 2022 with enormous personal computing power and for
interactive editing, everyone is using and transferring stream-based files
of characters that are then interpreted at the delivery site.  There are
many reasons for this including limits in many organizations of the file
types that may be transferred through common protocols and the difficulty
of maintaining relational database or structured file type schemas across
time.

Simple tends to win out over more powerful because few people want to bear
the cost of continual training to raise all of the newcomers to a level of
performance that they cannot teach themselves.

I like your model, Jean, and am a fan of such things but I am also
pragmatic and thus focus on building things that I think people will
consume within a given environment.  In Hyperbole's case, it is base Emacs
and nothing more.  If you are familiar with what it takes to standup a
scalable web application today (what everyone wants), you understand why
that is not a great model for systems where the users have to manage and
customize the infrastructure themselves.

-- rsw

On Fri, Oct 7, 2022 at 3:52 PM Jean Louis  wrote:

> On October 4, 2022 6:05:58 PM UTC, David Masterson
> >One major use-case for Org is capturing a task quickly.  This can be
> >done with Org or Mobile-Org (BeOrg, Orgzly).  One feature not easily
> >available is attaching images to the task to better explain the task.
> >
> >Thoughts on this?
>
> There are many ways of capturing elementary objects. Org Capture is one
> way as it's connection between Emacs and outside programs or Emacs and
> Emacs.
>
> With or without Org or Emacs computer users should be able to capture any
> pieces of information and it's references in any type of a system.
>
> For me personally I use PostgreSQL database and have finely grained types
> of objects, so I can relate anything to anything, then export to Org or
> package with any kind of connected objects, not only Org.
>
> The way to go for Org users is to make a function that first takes
> specific files and then captures the rest. Then files are to be used as
> properties or links in subheading.
>
> That is what I don't like as too many properties and markup is really
> disturbing. I keep it invisible.
>
> Design of such system shall be that each elementary object has our get
> it's really unique reference, possibly across networks and world, then that
> it gets it's type of relation, and it's value such as file. The file is
> object too, must have it's references.
>
> Relation could be just RELATED, but it could be, CONTRACT or DISREGARD, as
> one shall know why are some other objects attached.
>
> Relating objects is most important in information management.
>
> https://en.m.wikipedia.org/wiki/Relational_database
>
> What you and many others really want is relational database. I see no
> problem to connect Org to such. You can have just one property like ID or
> embedded not presentable link and all other properties related through one,
> by principles of the relational database.
>
> I often use preprocessing markup tags that interpolate to anything, like
> Org markup or any other. That way I can add just anything to Org or any
> other text. Like bunch of files or links, without using specific mode.
>
> Feature I use mostly to inject single objects into bunch of files, even
> thousands of files. When I edit such single object, other files
> automatically interpolate the contents of such object.
>
> Imagine company address appearing on thousands of related pages and over
> different domains, editing phone number changes it anywhere.
>
> Imagine that link name changes each in na while like those links showing
> specific but dynamic market price, when price is changed all documents get
> the new link name without files being edited or modified.
>
> When you have single object ID then adding files to it can be handled
> outside the single Org file. Imagine an Org ID as universal hyperlink to
> other objects. Let us say, properties in other file like "attachment" and
> list of files in that other file.
>
> It is up to Org designers to better adopt the idea of decentralization of
> properties, tags, etc. One can't put all the messy looking stuff in text
> file, it's not text any more, it looks like garbage on the screen.
>
> Moving more to the extreme then anything can be separated from Org and
> written in plethora of other modes, markups and then presented in the Org
> simple way for clarity and better understanding to final user.
>
>
>
> Jean
>


Re: Org and Hyperbole

2022-10-08 Thread Robert Weiner
Task management is a whole area separate from note taking.  This was
something I was interested in many years ago but have not been able to
publish a system to implement my ideas therein.  Since people generally
seem to be happy with Org's todo and agenda features, we expect to just
interact with those from Hyperbole.

But for notes, yes, one needs to capture them quickly and then get back to
your former context.  Later on you can process them more fully.

Although I see the great utility in having capabilities on mobile devices,
I find most apps way underpowered for constant use.  As Emacs becomes more
usable on mobile devices, we can add more mobile-friendly features to
Hyperbole.

-- rsw

On Tue, Oct 4, 2022 at 2:06 PM David Masterson 
wrote:

> Robert Weiner  writes:
>
> > We welcome brief summaries of features you need for effective note
> > taking in Emacs.  We are not looking to do much with images or on
> > mobile devices, just focused on people who spend a lot of time in
> > Emacs and want an easy-to-use notes system that does not require any
> > external packages like SQLite.
>
> One major use-case for Org is capturing a task quickly.  This can be
> done with Org or Mobile-Org (BeOrg, Orgzly).  One feature not easily
> available is attaching images to the task to better explain the task.
>
> Thoughts on this?
>
> --
> David Masterson
>


Re: Org and Hyperbole

2022-10-08 Thread Robert Weiner
On Tue, Oct 4, 2022 at 3:06 AM Payas Relekar  wrote:

> Robert Weiner  writes:
>
> > Thanks, Jean.  We have started work on a note-taking subsystem for
> > Hyperbole that will store UUIDs per note and will likely support
> backlinks
> > too.  We are seeing if we can make it support Koutlines, Emacs Outlines,
> > Org mode files and Markdown files, searching across all formats at the
> same
> > time.  The default for creating new notes will likely be a personal
> > Koutline file.
>
> Not Jean, but as someone using Org with Hyperbole, this is a great news!
>

Good to hear.  Maybe you can provide early feedback when it hits the
Hyperbole pre-release in the elpa-devel package archive (pre-releases of
Hyperbole packaged up from the git master branch tip).

>
> > We welcome brief summaries of features you need for effective note taking
> > in Emacs.  We are not looking to do much with images or on mobile
> devices,
> > just focused on people who spend a lot of time in Emacs and want an
> > easy-to-use notes system that does not require any external packages like
> > SQLite.
>
> For my 2c:
>
> - Multiple small files vs single large file.
>   I currently have former, with org-roam taking care of finding, linking
>   and backlinking between files, making it a non-issue to easily build a
>   network of connected topics/thoughts
>

Yes.  It will search over many files and even recursive directories of
files.  Org-roam has a good model for rapid searching, so we'll have to
consider something similar.  It might not be in the first release but will
come by the second major release.

>
> - Daily notes
>   Every day gets its own note, only generated if visited. This allows
>   dumping the thoughts at that moment rather than first hunting the
>   correct node. Then they can be easily filtered into actual topic note,
>   or just be referenced via backlinks buffer
>

Each note will have an optional datetime stamp which will be on by
default.  If you care to make one note per day, you can do that.

>
> - sqlite might just be better, considering overhead of opening and
>   parsing hundreds-thousands of small files is non-negligible.
>

Yes, that is the reason for desiring some kind of database-backed indexing.

>
> - Refiling
>   Refile/move the subtree (in Org terms) can be easily moved to another
>   file and the links automatically point to new location. This means I
>   can always know rearranging stuff later is a possibility, and its less
>   cognitive burden to organize.
>

Yes.  The idea is that you initially capture notes into a single default
file and then can quickly refile them as needed.

>
> In short, the framework takes care of organization and makes retrieval
> easy and all I have to worry about is the content.
>

Yes, I think we typically do this throughout Hyperbole, as it is very
important to us.

Thanks for the thoughts.

-- rsw


Re: Org and Hyperbole

2022-10-08 Thread Robert Weiner
Hi Juan:

I just tried your ':' technique for Hyperbole button activation with Avy
and it works well.  But what is the advantage over just using Avy to jump
to the button and then pressing {M-RET}.  With your technique, you have to
think about activating the button before you are there versus when you are
on it, as you normally do.

-- rsw


On Sat, Jun 25, 2022 at 10:32 AM Juan Manuel Macías 
wrote:

> Hi, Robert,
>
> Robert Weiner writes:
>
> > We do like avy and as you say, Hyperbole can work with it.  We try to
> > avoid requiring any non-builtin Emacs packages for Hyperbole.  With a
> > few, we support them optionally.  Unless there is a strong use case
> > for utilizing avy in certain ways, we would tend to leave that to
> > others to extend Hyperbole but personally I just add it in and use its
> > character and line navigation sometimes.  Did you have any particular
> > uses in mind?
>
> My use of the mouse within Emacs is practically nonexistent, and outside
> of Emacs I have relegated the mouse to a few graphical applications such
> as Gimp, Krita, Scribus, and little else. That's why I find avy
> extremely handy for quickly navigating through text. By adding an action
> to avy-dispatch-alist you can execute an arbitrary command once the
> cursor has jumped to its target. For example, I have put this for
> hyperbole in my init:
>
> (add-to-list 'avy-dispatch-alist '(?: . (lambda (pt)
>   (goto-char pt)
>   (hkey-either
>
> Thus, the typical action to activate a 'far' hyperbole button would be:
>
> 1. Call avy and insert a letter;
>
> 2. When avy's hints are displayed in the screen, I hit the colon key ":"
> and then the hint letter I want to go to (an implicit button, for
> example). And at the moment the associated action of that button is
> executed.
>
> For those of us who hardly use the mouse, it is really very practical,
> and I think maybe mentioning that tip might be nice in the hyperbole
> documentation.
>
> Best regards,
>
> Juan Manuel
>


Re: Org and Hyperbole

2022-10-08 Thread Robert Weiner
Hi Jonathan:

I and I think others would love to understand what you are trying to
achieve.  I get that you want to use the Koutline format with external
systems like GemText and the TXR parser generator/Lisp language but I would
rather understand the purpose of what you are trying to build (problem(s)
to solve) and what you can't do with the Koutliner as it now stands that
you would like to do.  Try to explain it without referencing any particular
technologies, as I can't follow many of the things you write because of a
lack of context.

Thanks,

-- rsw

On Fri, Jun 24, 2022 at 8:51 AM Robert Weiner  wrote:

> Hi Jonathan:
>
> Yes, the backlink issue is one of the reasons we have not focused on
> moving kcells with permanent hyperlink anchors from one file to another.
> We generally feel that the context of kcells within an outline is important
> and thus should stay as a unit.  You obviously can and do link to any kcell
> from outside the outline by combining the file path with the cell's
> permanent id and thus could have a grep-like search across any number of
> Koutlines.
>
> But I agree a cross-file permanent ID structure could be useful and that
> there are times where you want to move or copy outline structure between
> files (we already support exporting the text of koutlines to other buffers
> or to HTML), so this is a future use case to consider.
>
> -- rsw
>
>
> On Fri, Jun 24, 2022 at 6:55 AM indieterminacy
>  wrote:
>
>> Hi Robert,
>>
>> On 24-06-2022 07:34, Robert Weiner wrote:
>> > Hi Samuel:
>> >
>> >> On Jun 24, 2022, at 12:32 AM, Samuel Wales 
>> >> wrote:
>> >>
>> >> hi robert, welcome to the org list and thanks for your offer.
>> >>
>> >> for starters, does hyperbole have any concept of links that are:
>> >>
>> >> - unbreakable [like org-id]
>> >
>> > This one is not so simple to answer.  Hyperbole only uses
>> > perma-hyperlink anchors in its Koutliner format.  But it would be
>> > straightforward to add a UUID-type id for use elsewhere.
>> >>
>> >> - bidirectional [link a goes to link b; link b goes to link a], or,
>> >> reversible via command to say "what links here?" [by any mechanism.
>> >> if desired, please see "id markers" concept on this list for
>> >> unbreakable bidirectional links and more stuff]
>> >
>> > Hyperbole does not have bi-directional links, only a history function
>> > to move back through followed node paths.  We have started thinking
>> > about this need recently.
>> >
>> > — rsw
>> Improvements to the backend of Koutliner would be useful, especially as
>> (if I recall from the documentation) the API aspects are not so clearly
>> defined.
>>
>> Bi-directionality would be a priority IMHO, especially to facilitate the
>> updating of all links targeting a specific block should it move.
>>
>> At the moment, each link self updates when it identifies a reference
>> which needs to be updated but that comes across as an expediency (which
>> I mitigate with direty look running through links to validate they are
>> functional).
>>
>> It would be great to achieve this with an 'eventual-consistency' type
>> way, given that files could come in and out of a system or network.
>>
>> Similarly, allowing the perma-hyperlink anchors to be transferred would
>> really mature the format.
>>
>> Here are some umble functions I use to facilitate moving blocks into
>> other files:
>>
>> https://git.sr.ht/~indieterminacy/1q20bwb_oq_transferring_emacs/tree/main/item/kqk_kq_blocks_koutliner.el
>>
>> They at least avoid being descructive, as after moving the block becomes
>> a pointer to where the moved block ended up in the other dcoument - but
>> it feels like a fudge which could turn some documents into spaghetti.
>>
>>
>> While Im sure that you are planning on solving these problems within
>> eLisp, I should point out that I shall have a Koutliner parser, written
>> in TXR (soon to be finalised, Ive had some familial and health
>> impedencies recently).
>>
>> Here is a WIP
>> https://git.sr.ht/~indieterminacy/1q20hqh_oqo_parsing_glean
>>
>> And a (rough) example
>> https://git.sr.ht/~indieterminacy/1q20hqh_oqo_parsing_glean#examples
>>
>> I do need to add some facets (I suspect the linking for other blocks is
>> in a seperate script).
>> I shall also be integrating the parser with GemText (Orgmode would be
>> nice one day too).
>> https://git.sr.ht/~indieterm

Re: Org and Hyperbole

2022-10-08 Thread Robert Weiner
Hi Eric:

Thanks for pointing this out.  Although, I don't think many people use the
gnus-dired.el library, we'll add this to the todo list.  We have handled
this sort of thing with other keys previously, where the Hyperbole binding
is not utilized if the key has already been bound in the mode prior to
Hyperbole's binding.

-- rsw

On Thu, Jul 7, 2022 at 6:46 AM Fraga, Eric  wrote:

> Robert,
>
> one immediate issue that has arisen is the binding of C-c C-m (i.e. C-c
> RET) to hui-select-thing.  This clobbers the whole gnus-dired-mode-map
> in dired mode (for those of us that use gnus...).
>
> Just noting this but should probably take this off-list as it has
> nothing to do with org.
>
> --
> : Eric S Fraga, with org release_9.5.4-609-g713598 in Emacs 29.0.50


Re: Org and Hyperbole

2022-10-08 Thread Robert Weiner
Hi Siva:

(Sorry, I can't read this list too often so I miss some of these great
messages).

That is a very nice explanation of the power of implicit buttons.  Imagine
being able to ignore having to fully parse documents and instead just
describing the patterns of interest and what to do with them using simple
mechanisms (see Hyperbole's defal, defil and defib macros) and then having
live hypertext in such documents with no formatting changes.  Hyperbole
makes this quick and easy.

We hope more people will give it a spin and get an understanding of what
they can do with it as you have, especially in tandem with Org mode.

-- rsw

On Sun, Jun 26, 2022 at 2:37 AM Siva Swaminathan 
wrote:

> Hello,
>
> I only recently became aware of Hyperbole (through Bob's demo video
> available on Youtube), and came across this thread while googling to
> find more information about Hyperbole. I feel that some of the
> questions raised here about Hyperbole sound akin to the story of five
> blind men feeling the elephant, so I humbly offer my perspective on
> what I consider to be the key underlying ideas. Forgive me if I'm
> stating the obvious, and I also don't know whether Hyperbole as
> currently implemented does exactly all this :-)
>
> I'd like to think of the key idea of Hyperbole as converting text in
> buffers into *objects* (aka "buttons") by attaching *behavior* to them.
> The two actions provided by convention could be thought of as akin to
> the left-click and right-click which one is familiar with in
> contemporary GUIs, in this case respectively bound to methods for "do
> (by default)" and "show metadata". Supporting more
> behaviors/methods/messages for user-invocation is an obvious next idea
> (if not already so).
>
> The above system would be of quite limited composability if it required
> objects to be defined explicitly -- because most buffers one operates
> on are generated without awareness of Hyperbole (imagine the pain of
> everything needing to conform to something like a Hyperbole
> framework/protocol!). The cleverness behind implicit buttons is that
> one can opportunistically use common conventions as "schemas" to "parse
> / deserialize" the contents which make up an object from any buffer (in
> this case via regexps) and attach corresponding (expected) behaviors to
> them! Because of the highly structured nature of such data, even if
> embedded in a stream of plain text, it can typically be parsed
> correctly without needing explicit type annotations. The behaviors
> could presumably depend not just the object, but also the active modes,
> environment variables, etc.
>
> Here are a few made-up example use cases (hand-waving over details):
>
> 1. I might embed phrases such as "bug:123" in my code / emails / org
> task management and have behaviors that respectively fetch the bug
> report / open some URL in a browser / or update the TODO status based
> on the bug status, as desired. This would help me interface
> conveniently with a bespoke bug-tracking tool.
>
> 2. On encountering Goodreads links in my reading list org file, I could
> have a behavior to parse the contents of the webpage and extract
> desired metadata to add to the item properties (or an entry to some org
> table).
>
> 3. Linking by immutable block identifiers (and fast lookup) of course
> enables a lot of PKM workflows that have recently become popular (with
> the addition of bidirectional links).
>
> Other aspects such as menus generated from button files seem like
> convenient affordances bolted on to make up the UI of the system. I
> still need to wrap my mind around these, but I wonder whether there
> might be opportunities to compose with other ecosystem tools which have
> pioneered some nice UI ideas eg. transient menus, hydras, interactive
> selection lists, etc. But that's a discussion for the Hyperbole mailing
> list.
>
>
> From a first impression, I'm really impressed, and also surprised that
> Hyperbole is not more popular. Much gratitude to the contributors for a
> nifty tool, and a fascinating design perspective.
>
> Best regards,
> Siva
> http://sivark.me
>
>


Re: Org and Hyperbole

2022-10-08 Thread Robert Weiner
On Sat, Jun 25, 2022 at 5:18 PM David Masterson 
wrote:

> Robert Weiner  writes:
>
> > Great to see you here too.  We could use you on extended Hyperbole
> > documentation if you ever get into it.
>
> Thanks, my hands don't type well anymore or I might've considered it,
>
> > 1.  The OO-Browser was part of InfoDock, my IDE framework atop XEmacs.
> > I have updated it for GNU Emacs but never get the time to finish it
> > enough to put it out there again as Hyperbole fills my spare time.
> > But reach out directly if you want to discuss.
>
> Oh! I forgot about Infodock!  OO-Browser would be good for the
> developers in the crowd.  Perhaps the new interest of Hyperbole v8 will
> spur interest in OO-Browsr.
>

I know it would be good to revive it.  Just need more time than I have now.

>
> > 2. We have not yet integrated org-export with the Koutliner but want
> > to.  You can convert a Koutline to a star outline and call it an Org
> > file, so it wouldn’t be too hard.  It has its own builtin export to
> > HTML from which you could get to pdf as well, I imagine.
>
> I didn't see in the documentation on how to convert a Koutline to a star
> outline.  That would be useful to me (especially if you could go the
> other way as well).  With this capability, it shouldn't be too hard
> write a standard file header in (say) commented Latex that could be
> included in the file (via a post-hook) which could then be run through
> org-export via org-publish.
>

Just use {M-x kimport:star-outline RET} when in an Org or Emacs outline
buffer to create a Koutline from them.

I just checked and there doesn't seem to be an equivalent
kexport:star-outline but you could probably write it without too much
effort using the existing kview:map-siblings function and starting from the
first cell.

-- rsw


> --
> David Masterson
>


Re: Org and Hyperbole

2022-10-08 Thread Robert Weiner
On Tue, Sep 27, 2022 at 11:50 AM Russell Adams 
wrote:

>
> Could you point to some usage of Hyperbole that could help address
> it's use case?
>

Hi Russell:

There are videos.  The 'Overview and Demo' video has section links in the
description so you can jump to just sections that interest you:

  https://www.gnu.org/software/hyperbole/#videos

There is a Why Use Hyperbole document with various use cases:

  https://www.gnu.org/software/hyperbole/HY-WHY.html

There are user quotes that explain why they can't live without Hyperbole:

  https://www.gnu.org/software/hyperbole/#user-quotes

There is a Reddit page where I list a bunch of the things I do with
Hyperbole frequently, many with the single Action Key, M-RETURN:


https://www.reddit.com/r/emacs/comments/jk3cn0/daily_ways_gnu_hyperbole_helps_me_stay_in_flow/

And there is both a FAST-DEMO and older more extensive DEMO included with
Hyperbole, meant to be read and interacted with when you have Hyperbole
available (not just read as a web page as shown here):

  https://www.gnu.org/software/hyperbole/FAST-DEMO.html

  https://www.gnu.org/software/hyperbole/DEMO.html

And now Hyperbole works really well with Org mode so you can enjoy both
together to multiply your productivity.

-- rsw


Re: Org and Hyperbole

2022-10-08 Thread Robert Weiner
Hi Guys:

I know what SQLite, org-roam and multi-user RDBMSes are and I use all of
these things at various levels.  They are useful in many ways as you have
pointed out and across time, we may consider optional integrations but one
of the core design principles of Hyperbole is to work in all fairly current
major versions of Emacs (today this is back to V27) on any display device
and to not require any other external packages or C-compiled modules.  Now
we will add optional package support where useful as we have done for
Treemacs, ace-window and org-rifle but never require such things to use all
of Hyperbole's base functionality.  We then know that all Emacs users can
install Hyperbole and use it effectively without any external dependencies
required, whether on a terminal or an old operating system or what have
you.  This is part of the value of Emacs, common capabilities across a wide
spectrum of computing environments.

If I had my druthers, Hyperbole would ship pre-compiled as well since in
the past the byte-compiled code was forward-compatible across many major
Emacs versions, but this no longer seems to be the case to me and the Emacs
package system requires byte-compilation at installation time anyway, so we
have a bit less of a 'turn-key' system than desired.

Although we build Hyperbole so it can be highly customized and programmed,
we know that many people are just looking for ready to use productivity
improving packages, many more than want to hack on a package.  Therefore,
we focus our energies on delivering more and more value in that direction.

Org-roam is very capable for many people and we are not out to simply
replicate it and slightly improve upon its behavior.  We want to provide a
simpler, more contained solution for people who like and use HyRolo and
want a similar solution for note taking.  Quick and easy-to-use where you
can get in and out quickly, restoring your prior context rapidly, working
with multiple file formats and usable wherever you use Emacs.

-- rsw

On Sat, Oct 8, 2022 at 1:03 AM Jean Louis  wrote:

> * Hendursaga  [2022-10-08 03:46]:
> > Jean Louis  writes:
> >
> > > Of course it is so much better option than keeping stuff in text. All
> properties shall be in the database. SQLite is not a network database, thus
> it disables collaboration. It is better developing with PostgresSQL or
> MariaDB, or other network databases.
> >
> > Vanilla SQLite, that is. There are multiple[1] SQLite[2] addons[3]
> around[4] that add some sort of distributed layer to it, most being
> zero-cost (or at least low-cost) abstractions. Pretty cool, I'd say!
> >
> > ~ Hendursaga
> >
> > [1] https://dqlite.io/
> > [2] https://litestream.io/
> > [3] https://github.com/losfair/mvsqlite
> > [4] https://github.com/rqlite/rqlite
>
> Thanks, insightful, I have reviewed links. But none tells me that it
> is truly network based database. Of course one may replicate files
> through network and send data, that is not what is meant with network
> database. One can make layers on top of it, but that does not make it
> multi user or suitable for collaboration.
>
> From:
> https://www.sqlite.org/whentouse.html
>
> ,
> | Many concurrent writers? → choose client/server
> |
> | If many threads and/or processes need to write the database at the
> | same instant (and they cannot queue up and take turns) then it is best
> | to select a database engine that supports that capability, which
> | always means a client/server database engine.
> |
> | SQLite only supports one writer at a time per database file. But in
> | most cases, a write transaction only takes milliseconds and so
> | multiple writers can simply take turns. SQLite will handle more write
> | concurrency than many people suspect. Nevertheless, client/server
> | database systems, because they have a long-running server process at
> | hand to coordinate access, can usually handle far more write
> | concurrency than SQLite ever will.
> `
>
>
> --
> Jean
>
> Take action in Free Software Foundation campaigns:
> https://www.fsf.org/campaigns
>
> In support of Richard M. Stallman
> https://stallmansupport.org/
>
>


Re: Org and Hyperbole

2022-10-04 Thread Robert Weiner
Another good thought.  Anyone can add an embeddable export of Koutlines; I
don't think we'll find time to do that in the mainline development branch
though.

On Tue, Sep 27, 2022 at 10:45 AM Jean Louis  wrote:

> * Robert Weiner  [2022-06-25 23:52]:
> > 2. We have not yet integrated org-export with the Koutliner but want
> > to.  You can convert a Koutline to a star outline and call it an Org
> > file, so it wouldn’t be too hard.  It has its own builtin export to
> > HTML from which you could get to pdf as well, I imagine.
>
> Kotl should not depend of the HTML template.
>
> Kotl shall have possible export without headers, and styles. It would
> be best if style is built in the lines, and not part of the 
> section.
>
> That way kotl would be embeddable in various HTML templates.
>
> --
> Jean
>
> Take action in Free Software Foundation campaigns:
> https://www.fsf.org/campaigns
>
> In support of Richard M. Stallman
> https://stallmansupport.org/
>


Re: Org and Hyperbole

2022-10-04 Thread Robert Weiner
Thanks, Jean.  We have started work on a note-taking subsystem for
Hyperbole that will store UUIDs per note and will likely support backlinks
too.  We are seeing if we can make it support Koutlines, Emacs Outlines,
Org mode files and Markdown files, searching across all formats at the same
time.  The default for creating new notes will likely be a personal
Koutline file.

We welcome brief summaries of features you need for effective note taking
in Emacs.  We are not looking to do much with images or on mobile devices,
just focused on people who spend a lot of time in Emacs and want an
easy-to-use notes system that does not require any external packages like
SQLite.


On Tue, Sep 27, 2022 at 10:00 AM Jean Louis  wrote:

> * Robert Weiner  [2022-06-24 12:53]:
> > Hyperbole does not have bi-directional links, only a history
> > function to move back through followed node paths.  We have started
> > thinking about this need recently.
>
> If at all it is useful.
>
> As you know I am using database backed Dynamic Knowledge Repository
> Hyperscope. It has hyobjects table, and there is hyobjectrelations
> table that keeps track of related hyobjects.
>
> The workflow to record back links for any document is following:
>
> - all links have to be stored somewhere, so that they get their
>   reference; with Emacs 29 and built-in SQLite database that could be
>   one way to go. Other way is to keep stored values in files, and have
>   for each link some UUID or similar.
>
> - there must be table of relations or file containing relations, in
>   such file one would record the file name where link was inserted,
>   and the link's UUID;
>
> - functions to insert links in any lightweight markup file would need
>   to be rewritten so that they:
>
>   1. Verify that link has got its reference, UUID or some other
>  reference. That can work automatically. If I am inserting
>  hyperlink such as "ABC" to file "/tmp/my-file.txt" with line
>  number 3, then as soon as I have decided it, the function would
>  insert it into the tracking file or database table;
>
>   2. Function would also remember that file "/tmp/my-file.txt" has go
>  the link "ABC", and would at least try to remember its line
>  number or surrounding text. This information would be stored in
>  backlinks file or backlinks table;
>
> By using the above principle one could record backlinks, both in Org
> mode or any other mode.
>
> --
> Jean
>
> Take action in Free Software Foundation campaigns:
> https://www.fsf.org/campaigns
>
> In support of Richard M. Stallman
> https://stallmansupport.org/
>


How to utilize Org mode editing without display formatting

2022-08-28 Thread Robert Weiner
Hi:

I have an Emacs programmatic need where I want to read an Org file into
Emacs in a raw form without any display formatting (because the formatting
is too slow for large or many Org files) but I need to leave the buffer
after processing in Org mode, again without taking the time to visually
format the buffer in any way.  I want it in Org mode so that Org editing
and outlining commands potentially work properly but don't need any of the
fancy font-locking or complex display formatting.  Is this possible without
building a derived mode?

It would be very nice if the display formatting in Org were a minor mode
that you could enable and disable to switch between the formatted and
unformatted display all with one command.

Thanks for any help.

-- rsw


Re: Org and Hyperbole

2022-07-16 Thread Robert Weiner
Just noting that we have seen this and will have a look.

-- rsw

> On Jul 16, 2022, at 7:16 PM, Robert Weiner  wrote:
> 
> And it does highly complex context matching for many common patterns out of 
> the box with no need for customization.
> 
> — rsw
> 
>> On Jul 7, 2022, at 8:26 AM, Ihor Radchenko  wrote:
>> 
>> Max Brieiev  writes:
>> 
>>> Embark defines the following targets: file, symbol, URL, s-expression,
>>> defun, etc. It seems it is conceptually the same as implicit buttons in
>>> Hyperbole. Is this correct?
>> 
>> AFAIK, the strength of Hyperbole is that you can easily define custom
>> targets.
>> 
>> Best,
>> Ihor



Re: Org and Hyperbole

2022-07-16 Thread Robert Weiner
And it does highly complex context matching for many common patterns out of the 
box with no need for customization.

— rsw

> On Jul 7, 2022, at 8:26 AM, Ihor Radchenko  wrote:
> 
> Max Brieiev  writes:
> 
>> Embark defines the following targets: file, symbol, URL, s-expression,
>> defun, etc. It seems it is conceptually the same as implicit buttons in
>> Hyperbole. Is this correct?
> 
> AFAIK, the strength of Hyperbole is that you can easily define custom
> targets.
> 
> Best,
> Ihor



Re: Org and Hyperbole

2022-07-06 Thread Robert Weiner
Hi Eric:

Wonderful.  We hope more Org users will try Hyperbole as well and let us
know any additional implicit button types  (automatic wiki-like
hyperbuttons) you would like to see in Org mode or other ways Org and
Hyperbole can interoperate.

-- rsw

On Wed, Jul 6, 2022 at 12:58 PM Fraga, Eric  wrote:

> So I installed hyperbole and it works very nicely.  The key binding is
> no longer intrusive.  Thank you.
> --
> : Eric S Fraga, with org release_9.5.4-609-g713598 in Emacs 29.0.50


Re: Org and Hyperbole

2022-07-04 Thread Robert Weiner
Correct.  It uses just C-h h to activate the Hyperbole minor mode and to 
display its keyboard driven minibuffer menu.  This is a normal global key 
binding which you can easily rebind to anything you like.

-- rsw

> On Jul 4, 2022, at 10:44 AM, Fraga, Eric  wrote:
> 
> On Monday,  4 Jul 2022 at 21:09, Tim Cross wrote:
>> It appears that hyperbole now uses C-h h as its menu key. Other C-h
>> bindings appear to be unaffected (you just don't get the old Hello file
>> which you normally have bound to C-h h).
> 
> Ah, that sounds better.  I can definitely manage without easy access to
> the hello file! ;-)
> 
> -- 
> : Eric S Fraga, with org release_9.5.4-605-g0ed0de in Emacs 29.0.50



Re: Org, Hyperbole, and eev

2022-06-28 Thread Robert Weiner
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  wrote:

> On Sun, 26 Jun 2022 at 21:50, Robert Weiner  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
>


Re: Org, Hyperbole, and eev

2022-06-26 Thread Robert Weiner
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  wrote:
> 
> On Sun, 26 Jun 2022 at 21:50, Robert Weiner  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



Re: Org, Hyperbole, and eev

2022-06-26 Thread Robert Weiner
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=%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}:



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  time  rest)
  (eval (ee-find-youtube-video youtubeid time)))

(defun ee-find-youtube-video (youtubeid  time  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 

Re: Org and Hyperbole

2022-06-26 Thread Robert Weiner
Hi Jonathan:

Yes, I no longer have time to maintain it and based on quality standards
don't wish to re-release it unless one or more highly experienced Emacs
package developers want to take it on, as it is a good size package.  Such
a person would have to have developed significant Emacs packages like Org
or Hyperbole and have reasonable time to answer questions and make updates
as issues and requests came in.  Familiarity with a multitude of
object-oriented languages would also be useful.  Such volunteers are
welcome.  Please don't offer if you have the desire but not the experience.

In the event no such party appears, when I do find time to make some
necessary updates for a release, I'll do my best to get to it and then make
a release that you can check out.

-- rsw

On Sun, Jun 26, 2022 at 4:28 PM indieterminacy
 wrote:

>
> On 26-06-2022 22:03, David Masterson wrote:
> >  writes:
> >
> >> On Sat, Jun 25, 2022 at 11:37:55PM -0700, Siva Swaminathan wrote:
> >
> >>> [...] I feel that some of the
> >>> questions raised here about Hyperbole sound akin to the story of five
> >>> blind men feeling the elephant [...]
> >>
> >> The nice thing about that kind of situation is that it only can
> >> improve
> >> by adding in a sixth blind man ;-)
> >>
> >> Thank you from someone "too swamped right now to try to tackle another
> >> whole peradigm, but still enormously curious about this thing".
> >
> > Yup!  I hope a new generation of users will sprout.  As I mentioned to
> > Bob, I think OO-Browser will bring programmers in to help expand
> > Hyperbole as well as OO-Browser.
>
> Ive seen references to OO-Browser (documentation, wistfulness) but hadnt
> come across how to try it.
>
> Id interpreted it as being a victim of bitrot and lost in the sands of
> time (and is resting next to a genie lamp and hardback documentation for
> Xemacs).
>
> Is there a working version about for GNU Emacs?
>
>
> --
> Jonathan McHugh
> indieterminacy@libre.brussels
>
>


Re: Org and Hyperbole

2022-06-26 Thread Robert Weiner
Hi Siva:

Yes, I think you have a good handle on the concepts behind Hyperbole
buttons and additional Action Key contexts.  Beyond that, there is also the
Koutliner, HyRolo and HyControl in Hyperbole as you grow into it.  Look
forward to seeing some of the implicit button types you create for your own
use.

-- rsw

On Sun, Jun 26, 2022 at 2:37 AM Siva Swaminathan 
wrote:

> Hello,
>
> I only recently became aware of Hyperbole (through Bob's demo video
> available on Youtube), and came across this thread while googling to
> find more information about Hyperbole. I feel that some of the
> questions raised here about Hyperbole sound akin to the story of five
> blind men feeling the elephant, so I humbly offer my perspective on
> what I consider to be the key underlying ideas. Forgive me if I'm
> stating the obvious, and I also don't know whether Hyperbole as
> currently implemented does exactly all this :-)
>
> I'd like to think of the key idea of Hyperbole as converting text in
> buffers into *objects* (aka "buttons") by attaching *behavior* to them.
> The two actions provided by convention could be thought of as akin to
> the left-click and right-click which one is familiar with in
> contemporary GUIs, in this case respectively bound to methods for "do
> (by default)" and "show metadata". Supporting more
> behaviors/methods/messages for user-invocation is an obvious next idea
> (if not already so).
>
> The above system would be of quite limited composability if it required
> objects to be defined explicitly -- because most buffers one operates
> on are generated without awareness of Hyperbole (imagine the pain of
> everything needing to conform to something like a Hyperbole
> framework/protocol!). The cleverness behind implicit buttons is that
> one can opportunistically use common conventions as "schemas" to "parse
> / deserialize" the contents which make up an object from any buffer (in
> this case via regexps) and attach corresponding (expected) behaviors to
> them! Because of the highly structured nature of such data, even if
> embedded in a stream of plain text, it can typically be parsed
> correctly without needing explicit type annotations. The behaviors
> could presumably depend not just the object, but also the active modes,
> environment variables, etc.
>
> Here are a few made-up example use cases (hand-waving over details):
>
> 1. I might embed phrases such as "bug:123" in my code / emails / org
> task management and have behaviors that respectively fetch the bug
> report / open some URL in a browser / or update the TODO status based
> on the bug status, as desired. This would help me interface
> conveniently with a bespoke bug-tracking tool.
>
> 2. On encountering Goodreads links in my reading list org file, I could
> have a behavior to parse the contents of the webpage and extract
> desired metadata to add to the item properties (or an entry to some org
> table).
>
> 3. Linking by immutable block identifiers (and fast lookup) of course
> enables a lot of PKM workflows that have recently become popular (with
> the addition of bidirectional links).
>
> Other aspects such as menus generated from button files seem like
> convenient affordances bolted on to make up the UI of the system. I
> still need to wrap my mind around these, but I wonder whether there
> might be opportunities to compose with other ecosystem tools which have
> pioneered some nice UI ideas eg. transient menus, hydras, interactive
> selection lists, etc. But that's a discussion for the Hyperbole mailing
> list.
>
>
> From a first impression, I'm really impressed, and also surprised that
> Hyperbole is not more popular. Much gratitude to the contributors for a
> nifty tool, and a fascinating design perspective.
>
> Best regards,
> Siva
> http://sivark.me
>
>


Re: Org, Hyperbole, and eev

2022-06-26 Thread Robert Weiner
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  wrote:

> On Sun, 26 Jun 2022 at 15:23, Robert Weiner  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  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
>


Re: Org, Hyperbole, and eev

2022-06-26 Thread Robert Weiner
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  wrote:

> On Sun, 26 Jun 2022 at 13:29, Robert Weiner  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.   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".
>
> 

Re: Org, Hyperbole, and eev

2022-06-26 Thread Robert Weiner
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.  .

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  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
>
>


Re: Org and Hyperbole

2022-06-25 Thread Robert Weiner
Hi David:

Great to see you here too.  We could use you on extended Hyperbole 
documentation if you ever get into it.

1.  The OO-Browser was part of InfoDock, my IDE framework atop XEmacs.  I have 
updated it for GNU Emacs but never get the time to finish it enough to put it 
out there again as Hyperbole fills my spare time.  But reach out directly if 
you want to discuss.

2. We have not yet integrated org-export with the Koutliner but want to.  You 
can convert a Koutline to a star outline and call it an Org file, so it 
wouldn’t be too hard.  It has its own builtin export to HTML from which you 
could get to pdf as well, I imagine.

-- Bob

> On Jun 25, 2022, at 3:07 PM, David Masterson  wrote:
> 
> Robert Weiner  writes:
> 
>> I am happy to answer questions and discuss ways we can make Hyperbole
>> and Org work even better together; one direct question per message
>> would typically work best.  Responses may take awhile as my schedule
>> makes it difficult to keep up with high volume mailing lists but if
>> you cc: r...@gnu.org, I'll likely see your message faster and respond.
> 
> Hi Robert,
> 
> *LONG* time since we last talked (~1990?).  Good to see that Hyperbole
> is still being developed -- it was very interesting even back then.  A
> couple of questions:
> 
> 1. Is OO-Browser still a part of Hyperbole and still developed?
> 
> 2. Is there a discussion on how to run a KOutline out to Latex and PDF
> thru (say) Org export in a way that allows you to take advantage of
> Latex packages or even mix-in Org markup?
> 
> -- 
> David Masterson



Re: Org and Hyperbole

2022-06-25 Thread Robert Weiner
Good idea, Juan.  I’m all for quick ways to activate buttons without losing 
your current context.  I’ll take a look at how we might support this as an 
optional load.

-- Bob

> On Jun 25, 2022, at 10:32 AM, Juan Manuel Macías  
> wrote:
> 
> Hi, Robert,
> 
> Robert Weiner writes:
> 
>> We do like avy and as you say, Hyperbole can work with it.  We try to
>> avoid requiring any non-builtin Emacs packages for Hyperbole.  With a
>> few, we support them optionally.  Unless there is a strong use case
>> for utilizing avy in certain ways, we would tend to leave that to
>> others to extend Hyperbole but personally I just add it in and use its
>> character and line navigation sometimes.  Did you have any particular
>> uses in mind?
> 
> My use of the mouse within Emacs is practically nonexistent, and outside
> of Emacs I have relegated the mouse to a few graphical applications such
> as Gimp, Krita, Scribus, and little else. That's why I find avy
> extremely handy for quickly navigating through text. By adding an action
> to avy-dispatch-alist you can execute an arbitrary command once the
> cursor has jumped to its target. For example, I have put this for
> hyperbole in my init:
> 
> (add-to-list 'avy-dispatch-alist '(?: . (lambda (pt)
>  (goto-char pt)
>  (hkey-either
> 
> Thus, the typical action to activate a 'far' hyperbole button would be:
> 
> 1. Call avy and insert a letter;
> 
> 2. When avy's hints are displayed in the screen, I hit the colon key ":"
> and then the hint letter I want to go to (an implicit button, for
> example). And at the moment the associated action of that button is
> executed.
> 
> For those of us who hardly use the mouse, it is really very practical,
> and I think maybe mentioning that tip might be nice in the hyperbole
> documentation.
> 
> Best regards,
> 
> Juan Manuel 



Re: Org and Hyperbole

2022-06-24 Thread Robert Weiner
Hi João:

Oantolin no doubt can speak to Embark much better but my present
understanding is that it is a toolkit package for generating contextual
popup or completion menus with a few standard context menus included.

Hyperbole is a much broader personal information management
environment, one part of which is to turn every common type of
cross-reference found in buffers from programming identifiers to
page links into immediately useable hyperlinks with no effort
or markup on your part (implicit buttons).

Hyperbole includes a large array of implicit buttons and context
awareness, rather than expecting you to write your own solutions
to all of your needs.  It is more turn-key.  One appendix in the
Hyperbole manual is filled with all the contexts and associated
actions that Hyperbole supports out of the box:

https://www.gnu.org/software/hyperbole/man/hyperbole.html#toc-Smart-Key-Reference-1

Other features include: named hyperbuttons accessed from any
buffer, advanced contact management or hierarchical record
searching (point HyRolo at Org files and you can find single
entries within hierarchies), automatable frame and window
management, action triggers from mouse drags, Org hyperbutton
activation outside of Org mode, easy menu-based exposure of
Emacs filtering and searching capabilities, quick grid-based
display of desired buffers or files.  Hyperbole puts your textual
information at your fingertips in a myriad of ways, just as Emacs
makes text editing convenient and flexible in a myriad of ways.

Like Emacs, you are expected to grow into a broad away of uses across time,
not to digest all at once or in your first month of use.  But by learning
and combining
capabilities, you can become masterful at managing your information and Org
can
be a big part of this journey as well.

Enjoy.

-- rsw


On Fri, Jun 24, 2022 at 1:57 PM João Pedro  wrote:

> Hey Robert. Thanks for coming here to offer to clarify any doubts people
> have regarding Hyperbole.
>
> I haven't been interacting with the thread, but I've been lurking about
> and I've tried Hyperbole in the past, but couldn't precisely figure out
> its use case in my particular workflow, so I gave up on it.
>
> Now, according to your description, the main feature of Hyperbole looks
> a lot like what Embark [1] does sort of the same thing, albeit in
> different contexts, complexity (not a bad thing) and workflow. Would you
> be able to compare them? I think it would help me understand where
> exactly Hyperbole fits, and what is the problem it tries to solve.
>
> [1] https://github.com/oantolin/embark
>
> Best regards,
>
> --
> João Pedro de A. Paula
> IT undergraduate at Universidade Federal do Rio Grande do Norte (UFRN)
>


Re: Org and Hyperbole

2022-06-24 Thread Robert Weiner
Hi Juan:

Thanks for the positive thoughts on Hyperbole.  I must say everyone here
has a great attitude and writes thoughtfully from what I have seen.

It seems like you are off to a good start utilizing core features as you
get familiar with them and then adding on across time.

We do like avy and as you say, Hyperbole can work with it.  We try to avoid
requiring any non-builtin Emacs packages for Hyperbole.  With a few, we
support them optionally.  Unless there is a strong use case for utilizing
avy in certain ways, we would tend to leave that to others to extend
Hyperbole but personally I just add it in and use its character and line
navigation sometimes.  Did you have any particular uses in mind?

-- rsw


On Fri, Jun 24, 2022 at 9:52 AM Juan Manuel Macías 
wrote:

> Hi, Robert,
>
> First of all, welcome to the list. And of course congratulations on all
> the great work you've done with hyperbole. In my ignorance, when I
> recently installed it from ELPA, I thought it was a relatively recent
> package. But it seems that you have been developing it for a long time,
> while adapting it to the latest GNU Emacs trends. This is fortunate,
> because what is new is combined with experience and the residue of work
> already done over the years.
>
> At the moment I am not going to comment here anything specific on the
> technical level, because I have been using hyperbole for a short time
> and my knowledge of this package is still very limited. I think the best
> strategy for using hyperbole, from a user's point of view, is to simply
> use it. And gradually discover which parts of hyperbole can be useful
> and integrate into one's workflow. This is more practical than trying to
> start from a global conceptual base (IMHO). I'm still having trouble
> explaining what Org is for and what Org really is :-). But this is also
> the case with Emacs itself. When I first started using Emacs I thought
> it was just a text editor, like any other text editor. In fact, on my
> first day with Emacs I hated it dearly and uninstalled it in a rage. Now
> it's my desktop environment and my work environment, with EXWM, with
> Org, among others, and hopefully with Hyperbole as well. I suppose that
> it is the daily use that is making us connect the dots...
>
> I really like the implicit link system, and it is really easy to define
> new links. I have already defined a set of new buttons for LaTeX, which
> recognize commands and environments and point to the local TeX live
> documentation or texstackexchange.com. And with avy they work great.
> Have you thought about giving a support for avy? In any case it is easy
> to add a new avy action to avy-dispatch-alist.
>
> Best regards,
>
> Juan Manuel
>
> Robert Weiner writes:
>
> > Hi:
> >
> > Thanks to Juan for starting this thread and the interesting
> > conversation it has started.  I just joined this mail list, so I don't
> > have the prior messages and can't reply to the thread, so I have
> > started this new one.
> >
> > I am the author of Hyperbole and would be happy to answer questions
> > concerning Hyperbole today (so you don't have to answer based on
> > experience from the 1990s).  Hyperbole has been modernized for use
> > with Org mode and Emacs 28 and continues to develop.  There are videos
> > that demonstrate some of its features in simple, understandable ways.
> > Hyperbole is a single Emacs package that can be installed and
> > uninstalled quickly for testing.  It is largely a global minor mode,
> > so you can also disable it quickly if you ever care to.  In 20 minutes
> > you can get through the builtin, interactive demo and be on your way
> > to basic yet powerful usage.  We have listened to much feedback in the
> > last few years and made it much more approachable.
> >
> > I find most of the confusion is people trying to understand how
> > Hyperbole works under the covers rather than just following the
> > tutorial and exploring it.  Hyperbole can be hacked on if you are a
> > moderate to advanced programmer but it is meant to be used, like Org
> > mode.  Hyperbole recognizes many, many common contexts in buffers that
> > could serve as hyperlinks (paths, URLs, multiple key sequences, mail
> > addresses, and on and on) and performs the typically desired action
> > when you press its Action Key {M-RET} on these 'implicit buttons'.
> > You get all this for free with no effort on your part.  Then if you
> > want to extend such behavior, as you have seen a bit of, you can
> > define your own implicit button and action types once and then
> > activate an infinite number of matching implicit buttons.  For
> > example, in an Emacs shell buffer, type:
>

Re: Org and Hyperbole

2022-06-24 Thread Robert Weiner
Hi Jonathan:

Yes, the backlink issue is one of the reasons we have not focused on moving
kcells with permanent hyperlink anchors from one file to another.  We
generally feel that the context of kcells within an outline is important
and thus should stay as a unit.  You obviously can and do link to any kcell
from outside the outline by combining the file path with the cell's
permanent id and thus could have a grep-like search across any number of
Koutlines.

But I agree a cross-file permanent ID structure could be useful and that
there are times where you want to move or copy outline structure between
files (we already support exporting the text of koutlines to other buffers
or to HTML), so this is a future use case to consider.

-- rsw


On Fri, Jun 24, 2022 at 6:55 AM indieterminacy
 wrote:

> Hi Robert,
>
> On 24-06-2022 07:34, Robert Weiner wrote:
> > Hi Samuel:
> >
> >> On Jun 24, 2022, at 12:32 AM, Samuel Wales 
> >> wrote:
> >>
> >> hi robert, welcome to the org list and thanks for your offer.
> >>
> >> for starters, does hyperbole have any concept of links that are:
> >>
> >> - unbreakable [like org-id]
> >
> > This one is not so simple to answer.  Hyperbole only uses
> > perma-hyperlink anchors in its Koutliner format.  But it would be
> > straightforward to add a UUID-type id for use elsewhere.
> >>
> >> - bidirectional [link a goes to link b; link b goes to link a], or,
> >> reversible via command to say "what links here?" [by any mechanism.
> >> if desired, please see "id markers" concept on this list for
> >> unbreakable bidirectional links and more stuff]
> >
> > Hyperbole does not have bi-directional links, only a history function
> > to move back through followed node paths.  We have started thinking
> > about this need recently.
> >
> > — rsw
> Improvements to the backend of Koutliner would be useful, especially as
> (if I recall from the documentation) the API aspects are not so clearly
> defined.
>
> Bi-directionality would be a priority IMHO, especially to facilitate the
> updating of all links targeting a specific block should it move.
>
> At the moment, each link self updates when it identifies a reference
> which needs to be updated but that comes across as an expediency (which
> I mitigate with direty look running through links to validate they are
> functional).
>
> It would be great to achieve this with an 'eventual-consistency' type
> way, given that files could come in and out of a system or network.
>
> Similarly, allowing the perma-hyperlink anchors to be transferred would
> really mature the format.
>
> Here are some umble functions I use to facilitate moving blocks into
> other files:
>
> https://git.sr.ht/~indieterminacy/1q20bwb_oq_transferring_emacs/tree/main/item/kqk_kq_blocks_koutliner.el
>
> They at least avoid being descructive, as after moving the block becomes
> a pointer to where the moved block ended up in the other dcoument - but
> it feels like a fudge which could turn some documents into spaghetti.
>
>
> While Im sure that you are planning on solving these problems within
> eLisp, I should point out that I shall have a Koutliner parser, written
> in TXR (soon to be finalised, Ive had some familial and health
> impedencies recently).
>
> Here is a WIP
> https://git.sr.ht/~indieterminacy/1q20hqh_oqo_parsing_glean
>
> And a (rough) example
> https://git.sr.ht/~indieterminacy/1q20hqh_oqo_parsing_glean#examples
>
> I do need to add some facets (I suspect the linking for other blocks is
> in a seperate script).
> I shall also be integrating the parser with GemText (Orgmode would be
> nice one day too).
> https://git.sr.ht/~indieterminacy/1q20hqh_kq_parsing_gemtext/
>
> I do quite like TXR's datalisp format but I havent gotten around to
> finding a way to slurping it up into eLisp. I feel like it should be
> easy to resolve but its not a query which is easy given SEO search.
>
> The way Ill be approaching this interpreter is that it could search the
> aggregate or a journey from one document. Being able to have an overview
> of multiple documents is something I consider to be helpful, given the
> domain of cross-referencing.
>
> and FYI, I will be working on outputting RDF from Koutliner and GemText
> analyses.
>
> --
> Jonathan McHugh
> indieterminacy@libre.brussels
>


Re: Org and Hyperbole

2022-06-24 Thread Robert Weiner
Hi Tim:

Great to see you working with Org and Hyperbole together.  It is funny you
mention a dashboard as that is the main next feature we are working on for
Hyperbole.  Presently, there is a 'personal button file' that serves as
your launch pad for any commonly used hyperbuttons, accessed with {C-h h b
p}.  There is a similar per directory file, {C-h h b d}, any of which can
be Org files or any format you prefer.  To augment the personal file, we
plan on adding a quick access menu to search, jump to and edit your
personal, commonly used Hyperbole, Emacs and Org constructs that would
serve as a dashboard, bringing together a lot of the hyper capabilities
distributed throughout Emacs, including all categories of Hyperbole
buttons, Org files, bookmarks, URLs, agenda items, notes, todos, etc. And
each type will be customizable so you can use your favorite feature whether
from Org, Hyperbole or another package.  It is in early development now, so
feel free to mention any wishlist items.



On Fri, Jun 24, 2022 at 2:44 AM Tim Cross  wrote:

>
> Hi Robert,
>
> welcome to the list.
>
> I find hyperbole very interesting and am trying it out now. I can see a
> few areas where I think it may augment my current org based workflows
> and development tasks.
>
> One thing I will be looking at is how well hyperbole works with an
> evil-mode based configuration. Probably no big effect with regards to
> basic links and things like the interesting roladex type system, but may
> be relevant with regards to koutline.
>
> At this stage, I'm thinking hyperbole might be good as a basic
> 'dashboard' type startup screen which makes selecting projects or Emacs
> based apps (like this mu4e environment) easy to select. I likely won't
> take advantage of the window/frame management stuff as I now tend to
> work mainly with emacs tabs - I rarely even split windows anymore and
> now tend to just have one big frame with many tabs or tab groups.
>
> It will be interesting to see if there are areas where org mode and
> hyperbole may further enhance each other. I see them as having good
> collaboration potential rather than as competing/conflicting systems.
>
>


Re: Org and Hyperbole

2022-06-24 Thread Robert Weiner
Hi Samuel:

> On Jun 24, 2022, at 12:32 AM, Samuel Wales  wrote:
> 
> hi robert, welcome to the org list and thanks for your offer.
> 
> for starters, does hyperbole have any concept of links that are:
> 
> - unbreakable [like org-id]

This one is not so simple to answer.  Hyperbole only uses perma-hyperlink 
anchors in its Koutliner format.  But it would be straightforward to add a 
UUID-type id for use elsewhere.
> 
> - bidirectional [link a goes to link b; link b goes to link a], or,
> reversible via command to say "what links here?" [by any mechanism.
> if desired, please see "id markers" concept on this list for
> unbreakable bidirectional links and more stuff]

Hyperbole does not have bi-directional links, only a history function to move 
back through followed node paths.  We have started thinking about this need 
recently.

— rsw


Re: Org and Hyperbole

2022-06-23 Thread Robert Weiner
Hi Eduardo:

I hope you'll take another look.

(hyperbole-mode 0)  disables the Hyperbole minor mode and all of its key
bindings.
The global binding {C-h h} is left in place so that you can quickly
re-enable Hyperbole's
minor mode and display its navigational minibuffer menu (where quick keys
let you
rapidly access a lot of Hyperbole capabilities.  You can unbind this global
key as you do
any other:

   (global-unset-key "\C-hh")


Re: Org and Hyperbole

2022-06-23 Thread Robert Weiner
Typically:
{M-x package-install RET hyperbole RET}
{M-x hyperbole-mode RET}

is enough to install the stable, V8 version of Hyperbole to try out.

If you are more advanced and want to try out the in-development version
that corresponds to the git tip of the Hyperbole master branch, this is
available
as a package from the elpa-devel archive.  To setup to install from there,
see
this article:

  https://protesilaos.com/codelog/2022-05-13-emacs-elpa-devel/

or just add:

(push '("elpa-devel" . "https://elpa.gnu.org/devel/;) package-archives)

to your Emacs init.

Built-in Org support for Hyperbole is documented here:


https://www.gnu.org/software/hyperbole/man/hyperbole.html#Smart-Key-_002d-Org-Mode


Re: Org and Hyperbole

2022-06-23 Thread Robert Weiner
For reference:

Hyperbole Videos are here:
   https://www.youtube.com/channel/UCNRwswKKpjOlOVfFTS73P9A/videos

The Hyperbole Home Page is here:
 https://www.gnu.org/software/hyperbole/

Just to look at if you don't want to interact with it,
the Hyperbole FAST-DEMO file is here:
  https://www.gnu.org/software/hyperbole/FAST-DEMO

The full web-version of the Hyperbole reference manual
(somewhat technical) is here:
   https://www.gnu.org/software/hyperbole/man/hyperbole.html

Enjoy.


Re: Org and Hyperbole

2022-06-23 Thread Robert Weiner
Hi:

Thanks to Juan for starting this thread and the interesting
conversation it has started.  I just joined this mail list, so I don't
have the prior messages and can't reply to the thread, so I have
started this new one.

I am the author of Hyperbole and would be happy to answer questions
concerning Hyperbole today (so you don't have to answer based on
experience from the 1990s).  Hyperbole has been modernized for use
with Org mode and Emacs 28 and continues to develop.  There are videos
that demonstrate some of its features in simple, understandable ways.
Hyperbole is a single Emacs package that can be installed and
uninstalled quickly for testing.  It is largely a global minor mode,
so you can also disable it quickly if you ever care to.  In 20 minutes
you can get through the builtin, interactive demo and be on your way
to basic yet powerful usage.  We have listened to much feedback in the
last few years and made it much more approachable.

I find most of the confusion is people trying to understand how
Hyperbole works under the covers rather than just following the
tutorial and exploring it.  Hyperbole can be hacked on if you are a
moderate to advanced programmer but it is meant to be used, like Org
mode.  Hyperbole recognizes many, many common contexts in buffers that
could serve as hyperlinks (paths, URLs, multiple key sequences, mail
addresses, and on and on) and performs the typically desired action
when you press its Action Key {M-RET} on these 'implicit buttons'.
You get all this for free with no effort on your part.  Then if you
want to extend such behavior, as you have seen a bit of, you can
define your own implicit button and action types once and then
activate an infinite number of matching implicit buttons.  For
example, in an Emacs shell buffer, type:

   echo $PATH

then press the {M-RET} key or Shift-Middle mouse button on any path
there and jump right to it.  I find that very useful as a simple
example.  People are often surprised at how many things simply work
right out of the box because such broad context-sensitive behavior is
difficult to develop and rarely seen.  Just try it out and you should
find some contexts that you can leverage rapidly.  {C-h A} displays
what Hyperbole's Action Key will do in any context so you can always
check and learn before activating anything.  We say: Hyperbole brings
your text to life.  Like Org and Emacs, it provides an extensive
environment that you can grow into across time, getting ever more
productive rather than hitting a ceiling as with most point
packages/tools.

I am happy to answer questions and discuss ways we can make Hyperbole
and Org work even better together; one direct question per message
would typically work best.  Responses may take awhile as my schedule
makes it difficult to keep up with high volume mailing lists but if
you cc: r...@gnu.org, I'll likely see your message faster and respond.



Re: [O] Key binding popup interface

2017-12-13 Thread Robert Weiner
On Wed, Dec 13, 2017 at 10:40 AM, Kaushal Modi <kaushal.m...@gmail.com>
wrote:

> On Tue, Dec 12, 2017 at 6:51 PM Robert Weiner <r...@gnu.org> wrote:
>
>>
>> ​One limitation of hydra right now is that it doesn't interface with the
>> standard way of showing help for key bindings since its keys aren't
>> actually bound but handled via internal hydra event handling.  With a bit
>> of thought though, I think it could be integrated well.
>>
>
> I don't follow what the functional limitations are of what you said. How
> does your concern affect a package author or the end user?
>

​C-h k shows the documentation for a key binding in a help buffer rather
than just a laid out summary of all the keys in a particular hydra map.
C-h k is important to know the details of what individual keys do, so
hydra needs a way of integrating with standard key documentation lookup
capabilities if it gets integrated with core Emacs, which I would like to
see.

Personally, I also think the red, blue, etc. color notation should change to
something more descriptive of what they do and then the particular colors
associated could be customized to suit any particular visual theme.

Bob


Re: [O] Key binding popup interface

2017-12-12 Thread Robert Weiner
On Tue, Dec 12, 2017 at 4:01 PM, Stefan Monnier 
wrote:

>
> > Can hydra.el be merged into Emacs core, so that all the packages can
> start
> > taking advantage of that?
>
> I have no opinion on that part, but if a part of Hydra would be useful
> for other packages, then it'd be good to split it out: for me "Hydra"
> means "define a Hydra via defhydra or something like that", so if you
> tell me to use Hydra to "show the available valid key bindings",
> I wouldn't know where to start.
>

​One limitation of hydra right now is that it doesn't interface with the
standard way of showing help for key bindings since its keys aren't
actually bound but handled via internal hydra event handling.  With a bit
of thought though, I think it could be integrated well.

Bob
​


[O] ANNOUNCE: GNU Hyperbole 6.0.1 for Emacs 24.4 - 25 is released

2016-07-28 Thread Robert Weiner
GNU Hyperbole (pronounced Ga-new Hi-per-bo-lee), or just Hyperbole, is an
amazing programmable hypertextual information management system implemented as
a GNU Emacs package.  This is the first public release in 2016.  Hyperbole has
been greatly expanded and modernized for use with the latest Emacs 25
releases; it supports GNU Emacs 24.4 or above.  It contains an extensive set
of improvements that can greatly boost your day-to-day productivity with Emacs
and your ability to manage information stored across many different machines
on the internet.  People who get used to Hyperbole find it helps them so much
that they prefer never to use Emacs without it.

Hyperbole includes easy-to-use, powerful hypertextual button types and links
that can be made without the need to learn a markup language.  without the need
to learn a markup language.  It also includes a hierarchical, record-based
contact manager, a rapid window and frame control system and a powerful
multi-level auto-numbered outliner.  All features are aimed at making textual
information management and display fast and easy.

Hyperbole embeds hypertext buttons within unstructured and structured files,
mail messages and news articles.  It offers intuitive keyboard and mouse-based
control of information display within multiple windows.  It also provides
point-and-click access to World-Wide Web URLs, Info manuals, ftp archives, etc.

The Hyperbole wiki page, "https://www.emacswiki.org/emacs/Hyperbole;, explains
the many ways it differs from and is complementary to Org mode.

Instructions follow on how to download, install and utilize GNU Hyperbole as an
Emacs package.  These are followed by What's New with Hyperbole in 2016.

Bob Weiner designed and programmed GNU Hyperbole. He and Mats Lidell maintain
it for the Free Software Foundation.  It includes an interactive demo to
introduce you to its features and a detailed reference manual.

===
*  About
===

GNU Hyperbole consists of five parts:

* 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 automatically recognized within text
 that perform actions, e.g.  bug#24568 displays the bug status
 information for that bug number.

 Buttons are accessed by clicking on them or referenced by name
 (global buttons), so they can be activated regardless of what is on
 screen.  Users can make simple changes to button types.  Emacs Lisp
 programmers can prototype and deliver new types quickly.

 Hyperbole includes two special `Smart Keys', the Action Key and the
 Assist Key, that perform an extensive array of context-sensitive
 operations across emacs usage, including activating and showing
 help for Hyperbole buttons.  In many popular Emacs modes, they
 allow you to perform common, sometimes complex operations without
 having to a different key for each operation.  Just press a Smart
 Key and the right thing happens;

* Contact and Text Finder
 an interactive, textual information management interface,
 including fast, flexible file and text finding commands.  A
 powerful, hierarchical contact manager, HyRolo, which anyone can
 use, is also included.  It is easy to learn since it introduces
 only a few new mechanisms and has a menu interface, which may be
 operated from the keyboard or the mouse;

* Screen Control
 the fastest, easiest-to-use window and frame control available for
 GNU Emacs, called HyControl.  With just a few keystrokes, you can
 shift from increasing a window's height by 5 lines to moving a
 frame by 220 pixels or immediately moving it to a screen corner.
 Text in each window or frame may be enlarged or shrunk (zoomed) for
 easy viewing, plus many other features;

* Hypertextual Outliner
 an advanced outliner, the Koutliner, with multi-level
 autonumbering and permanent identifiers attached to each outline
 node for use as hypertext link anchors, per node properties and
 flexible view specifications that can be embedded within links or
 used interactively;

* Programming Library
 a set of programming libraries, for system developers who want to
 integrate Hyperbole with another user interface or as a back-end
 to a distinct system.  (All of Hyperbole is written in Emacs Lisp
 for ease of modification.  It has been engineered for real-world
 usage and is well structured).

The GNU Hyperbole project home page gives a more extensive description:
"https://www.gnu.org/software/hyperbole/;.

===
*