* hyperbole: my journey with actually extending it

in order to write this stuff with minimal overhead, im copying vimwiki: ret on word/region to make a file of it, then ret again to visit that link, then backspace to return to the previous buffer.

since i already use Gnu Hyperbole, i wanna fix it so it does taht.

previously when i did this, i simply made my org link creation function a fallback - but this time i want to do it right. 

** what even is hyperbole?
it's just a link handler basically.

every article on the internet seems to stumble over trying to explain what hyperbole actually is... and hyperbole doesn't help. it presents itself as an everything tool, in fact. and to be sure, there are indeed different things to use it for. but to me it's really just a link handler - press RET on anything that looks the least bit linky and it goes. org links? yup. plain urls in buffers? yup. =/path/to/file.ext:line:column= file links? absolutely! as well as many many other formats i probably haven't even heard of. but here, we just need it to turn a plain word into an org link.

so how do you add a rule for that?

there's gotta be a function to do it... searching thru ... maybe =hkey-alist=? hkey-alist has loads of stuff

https://www.gnu.org/software/hyperbole/man/hyperbole.html#Smart-Keys says:
#+begin_quote
3. How can I change the Smart Mouse Key bindings?

Since the Smart Mouse Keys are set up for use under many different Emacs configurations, there is no easy way to provide user level customization. Any mouse key binding changes require editing the (hmouse-setup) and (hmouse-get-bindings) functions in the hmouse-sh.el file. 

To make the Smart Keys do new things in particular contexts, define new types of implicit buttons, see Implicit Buttons.

The hkey-alist and hmouse-alist variables in hui-mouse.el and hui-window.el must be altered if you want to change what the Smart Keys do in standard contexts. You should then update the Smart Key summary documentation in the file, man/hkey-help.txt, and then regenerate the readable forms of this manual which includes that file.
#+end_quote

okay, so basically just modifying that variable - adding a thing locally in org mode.

time to try doing that.

okay, checking the default hkey-alist reveals that it just runs =(smart-org)= on stuff. Perhaps we can just advise that? let's see how it actually works.

...

nope that's frankly horrible. nope nope nope. better idea, just make it the first thing getting checked.

okay, how about something like
#+begin_src elisp
(add-to-list 'hkey-alist '((and
                            (eq major-mode 'org-mode)
                            (not (smart-org)))
                           . ((org-vw-make-newlink) . nil)))
#+end_src

this seems to have a problem, it complains about a type error but does work at least. good enough for now.

/it was at this point she realized that links to sub-articles are fundamentally broken in this project as it currently exists, because they are computed relative to the file being linked from rather than the project root./

brb gotta rework some critical things :3