* Check out Deft: http://jblevins.org/projects/deft/ - Deft is an Emacs mode for quickly browsing, filtering, and editing directories of plain text notes, inspired by Notational Velocity. It was designed for increased productivity when writing and taking notes by making it fast and simple to find the right file at the right time and by automating many of the usual tasks such as creating new files and saving files.

* Hyperbole 8.0.1 Release Todos
** Look at Emacs button.el and its define-button-type and see whether can use with Hyperbole.
** Set printable representation of hbut:current to include plist so can see attributes so is easy to debug.
** Set print representation of hbutton symbols, notably hbut:current, to include its properties so easy to debug.
   May have to use Monnier's cl-print.el library included in Emacs or use (record) defstruct call to create a typed object.

** Look at bookmark+.el - https://www.emacswiki.org/emacs/BookmarkPlus#toc5
    and whether can integrate.  It replicates a lot of Hyperbole link facilities but rather than in-buffer links, categorizes named links by type and provides a different jump command per type, e.g. Info nodes as one type.  It stores bookmarks as an org-mode file and is generally a superset of Emacs bookmarks.
** Add automated tests.

(hpath:is-p "/home/bob.weiner/OneDrive - DP/IT/FIT-IT-Needs.md#2a. Team-oriented Daily Task Tracking")
(hpath:find "/home/bob.weiner/OneDrive - DP/IT/FIT-IT-Needs.md#2a2. STATUS")

** On Thu, Oct 3, 2019 at 5:12 PM Mats Lidell <mats.lidell@lidells.se> wrote:
Hi Bob,

I have been playing with this little hack lately:

----------------------------------------------------------------------
modified   hib-social.el
@@ -803,7 +803,8 @@ PROJECT value is provided, it defaults to the value of
                                  (princ (shell-command-to-string cmd)))))
                          ;; Project-only reference, run dired on the project home directory
                          (hpath:display-buffer (dired-noselect
-                                                (file-name-as-directory project-dir)))))
+                                                (file-name-as-directory project-dir)))
+                         (if (functionp 'magit-status-setup-buffer) (magit-status-setup-buffer))))
                       (t (if project-dir
                              (error "(git-reference): git project `%s' directory is unreadable or invalid: \"%s\""
                                     project project-dir)
----------------------------------------------------------------------

I figured that if I have magit installed I wanted to go to the magit status view directly when using a git button instead of the directory. Maybe hard coding it like that is yes, too hard coded, but it could be controlled through customize maybe? What do you say?

It's a good idea.  I think to integrate the capability we would have to have all of the types of git referents use their equivalent magit display functions and we would have to try to use the Hyperbole display-where setting as well.  Probably, we would write another version of this function that supports magit and probably make that the default if magit is available but allow for an overriding customization setting as well.  So it is a bit of a project and I will add it to the Todo list for the future.  Sound about right?

Glad to see someone is taking advantage of all of the git-related work.

* Hyperbole 8.0.0 Release DONE
** DONE: Change M-x hyperbole so checks if autoloads.el type files exist; if they don't, then it calls 'make src' to build those files.
** DONE: mouse-2 is mapped to action-key-release on home screen due to remapping; have to fix as did in Info mode, see: <(hmouse-sh)>
** DONE: Finish copying updated modeline functions from *scratch*.
** DONE: Remove {C-c C-r} global key binding since conflicts with mode-specific bindings.
   Remove from doc.  Use menus instead.
** DONE: Fix grep jumps when file names contain spaces doesn't work with action key but does with mouse 1, make it do the same thing.
** DONE: Update version to 7.0.9.
** DONE: Update HY-NEWS


* Hyperbole 8.0.0 Release Todos
** See if can get mouse-1 to follow links again, as it did originally, as users will miss this and not want to use mouse-2 to select
   things, even though it is superior.  This may only be an issue when you use unshifted Smart Keys  (hmouse-sh.el (hmouse-unshifted-setup):
   Disabled `mouse-1-click-follows-link' since it doesn't work with Hyperbole's down and up bindings.)

* hmouse-sh.el (hmouse-unshifted-setup): Disabled `mouse-1-click-follows-link' since it doesn't work
    with Hyperbole's down and up bindings.

** Fix paragraph filling:
   *** Probably need to add kfill:fill-region in kfill.el to do what is done in kfill:fill-paragraph.
   *** Need to add kotl-mode:split-line (move next line vertically down).
   *** par-align.el really needs to be fixed too as it is not filling comment properly any more.

** Add to Hyperbole menus a toggle of new customization, inhibit-hsys-org.
** Improve {C-h A} output when on explicit and implicit butttons moving types into the first section.
** Explicit button creation with region selected does not reuse region but inserts new text
** hproperty:highlight-face                abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
   hyrolo-highlight-face                   abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
     end up with black foreground and background on MacOS

** Handle Mats open issues in "~/Dropbox/hydev/HyperboleTickets.kotl"

** Change DEMO to TUTORIAL and add a new quick DEMO with many fewer sections.

** Finish writing test-hbuts.el and use.

** If have time, add moving explicit buttons between buffers.

** Highlight ibut labels when read in from a file.
** Rework hui:ibut-rename based upon hui:ebut-rename, i.e. allow in-buffer editing of label and make it use the ibut at point, if any.
** Add hui:gbut-rename, handling both explicit and implicit labels.
** In "hsys-org.el", find a way to bind a key for 'org-to-next-radio-target-link' to step through multiple radio target links that go to the same target or just all radio target links.  Also do something similar for link <<targets>>.
** Have a look at "TAXONOMY-ftrx.org".
**   Make labeled ibut:act work like ebut:act (Add equiv of interactive gbut:act but for current buffer, i.e. activate any labeled button (ebut or ibut) by name in the current buffer).
**   Add ibut:act to act like ebut:act and then use this in minibuffer and pull-down menus as 'Act' command rather than hui:hbut-current-act.
**   Modify ibut:get to search backward for any label and then to set its attribute in hbut:current.

** Add backlink command that when on a section heading or maybe anything that can be linked to such as pathnames, copies the referent to the kill-ring for yanking.  Then use this with hui:link-create.
** Allow HYPB to have suffixes like org mode
** Normalize function naming in hbut and ibut to match ebut, e.g. ebut:alist, ebut:list.
** For push-buttons and mouse-buttons like those in {C-h v smart-scroll-proportional RET}, display their key and mouse actions.
** Hyperbole Manual: Add 'Implicit Button Technicalities' to match 'Explicit Button Technicalities' section.
   Review section on 'Creating Types' to see if it is up-to-date.
** Fix that lbl-start and lbl-end attributes of ibuts point to text-start and text-end, not the named label position when a label is added.  Since these are probably used in hbut class, have to be careful of any changes.
** e/g/ilinks right now activate the buttons they are linked to.  But sometimes want to jump to those buttons; maybe change those to e/g/iclone and use links to jump to the button source or maybe just have a command that jumps to the source, i.e. e/g/ibut:to.  Need to write ebut:to and gbut:to based on ibut:to.
** Solve problem that sometimes when a global but is a link to an ibut, you want it to execute in the current-buffer and sometimes in the buffer of the ibut itself.
     Probably have a y-n prompt when creating the link-to-ibut that asks which way you want ** Also need a way to jump to the linked to button.
** Actype link-to-ibut when called interactively, ensure that if at an ibut, that it is not the one being linked from, otherwise, use default arguments, if any.
** <[link-to-ibut]>: <ilink: list buffers>
** <[list buffers]>: {C-x C-b}
** Document link-to-ibut and link-to-gbut in DEMO.
** In hproperty:but-flash, maybe rewrite counter loop for hproperty:but-flash-time to use a more standard delay technique.


** Add link-to-text-register and link-to-jump-register and note that desktop-save saves registers persistently.
** Maybe mention link-to-bookmark in DEMO.

** {C-h h e m} when change the type of a link button, still inserts existing button values into different type prompts for values, e.g. if first arg of old type was a line of text and change to linking to a path and line number, the line of text will appear when prompting for the path.

** When specifying a path for a button interactively since must-match is true, can't use a variable like ${hyperb:dir}.

** Code in outline-mode is just treated as part of the outline, not as code.

** Address rolo-logic issues reported as Emacs bug: hyrolo-search-regexp not set, no highlighting of matches, whole buffer returned
** In Dired mode, {C-u 0 @} with a mode of python-mode is not selecting the python-mode buffers.  Somehow the grid is displayed before the python-mode selection is known, apparently.

** This works:
    "~/.bashrc"
    "/home/bob.weiner/OneDrive/IT/FIT-IT-Needs.md#2a3. REQUIREMENTS"
    <ilink: FIT Tool Needs: "/home/bob.weiner/OneDrive/IT/FIT-IT-Needs.md">
    (hpath:mswindows-to-posix "/mnt/cas$/mpl-prod/1.4.4/Valuation/")
    (hpath:posix-to-mswindows "/mnt/cas$/mpl-prod/1.4.4/Valuation/")
    (hpath:is-p "/mnt/cas$/mpl-prod/1.4.4/Valuation/")
    "//dp-dc1dbe01/cas$/mpl-prod/1.4.4/Valuation/"
    "//dp-dc1dbe01/cas$/mpl/python/Valuation/"
    (hpath:is-p "//dp-dc1dbe01/cas$/tasks/Python/Capricorn/2018.12/Capricorn-LCSMB Notes - 2018.12.py")

** These buttons maybe aren't working:
    (hpath:mswindows-to-posix "\\\\dp-dc1dbe01\\cas$\\tasks\\Python\\Capricorn\\2018.12\\Capricorn-LCSMB Notes - 2018.12.py")
    (hpath:is-p "\\\\dp-dc1dbe01\\cas$\\tasks\\Python\\Capricorn\\2018.12\\Capricorn-LCSMB Notes - 2018.12.py")
   Action key on {C-c C-\\} causes backtrace as the newtext value looks like Lisp code.

** Extend <(smart-emacs-lisp-mode-p)> to maybe include org-mode and to add variables for both sets of major-mode tests.

** Creating an explicit button with highlighted text and using hkey-operate {C-c C-\\}
causes a reload of the Smart Keys and does not reuse the highlighted text but adds it after.

** In debugger-mode (what Emacs Lisp backtraces use), make Action Key when over something (not on whitespace) do whatever RET does because this follows refs much better.

** Integrate named ibuts with:
*** Key Bindings
*** Bookmarks
*** Registers

** Trap circular ilink, elink and glink references.

** Integrate with org-ctags.el (ensure its <<ctag id>> referents work.
** Generalize hpath:to-markup-anchor to work for any mode given in a new variable of conses of major-mode or major-mode list and section-pattern.
**  cvs commit hyweb pages after release 7.0.3 with new man files.
** Update https://savannah.gnu.org/projects/hyperbole with release news.
**  Write up list of quick, universal implicit buttons showing why should use Hyperbole and then a pointer to the HY-WHY file.
**  Write up full release announcement.
**  Announce on: hyperbole-users@gnu.org, emacs-devel@gnu.org, emacs-tangents@gnu.org, reddit.com/r/emacs, hackernews, freshmeat, Emacs blogs

** Check out Orgalist for Org-like item handling and navigation but in other major modes.  Could be useful for Hyperbole.
     https://lists.gnu.org/archive/html/emacs-orgmode/2017-12/msg00619.html

** Add buffer id integration for all of these sidebar packages:
     https://github.com/jojojames/dired-sidebar
     https://github.com/Alexander-Miller/treemacs - done
     https://github.com/jaypei/emacs-neotree
     https://github.com/sabof/project-explorer

** Org can automatically turn any occurrences of certain target names in normal text into a link. So without explicitly creating a link, the text connects to the target radioing its position. Radio targets are enclosed by triple angular brackets. For example, a target ‘<<<My Target>>>’ causes each occurrence of ‘my target’ in normal text to become activated as a link. The Org file is scanned automatically for radio targets only when the file is first loaded into Emacs. To update the target list during editing, press C-c C-c with the cursor on or at a target.	

* Hyperbole 8 Release Todos
  ** Add copying and kill-yank of explicit buttons between buffers.
  ** Document MSWindows paths and other extensive path handling in .texi manual.
  ** See https://www.emacswiki.org/emacs/SessionManagement for ways to persistently store windows and frames.
  ** Add actype link to Emacs frameset and maybe tie in to windows grid.
  ** "~/Dropbox/emacs/hyweb/hyperbole/" - Add Makefile to automatically convert to .html files.
  ** Use xref marker stack or something else to store Hyperbole source locations each time an Action Key jump is performed, so can navigate back.
  ** M-RET is bound in Spacemacs where its own M-RET binding is used often.  See what can be done to avoid conflicts.
  ** Org-mode survey feature requests to look at from awhile back:
       https://orgmode.org/survey.html
  ** There may be a bug left that is setting assist-flag when there is a hycontrol-arg that sets current-prefix-arg (manifested by action-key-depress-prev-point not being set in the middle of an Action Key press but assist-key-depress-prev-point is set).
  ** Update HY-README or HY-ABOUT with changes suggested in reddit posts (somwhere in this TODO file).
  ** When converting a star outline to a koutline, for each heading line, add an 'id' attribute with the heading text with each set of contiguous spaces replaced with dashes.
     Then when convert koutline to html, add an <a id="id-value"></a> for each cell that has an id.
  ** Add screenshots for major new features.
     *** Git and github references
  ** For HyRolo logical queries where records always match to the top level entry, figure out a way to just return sub-entries that match,
     e.g. for (hyrolo-demo-fgrep-logical "(and \"Media maker\" dunn)")
  ** Add menu item (menubar and minibuffer) that toggles flag that turns use of topwin.py on and off; maybe there are other new flags to do this for as well.
  ** When mark files in Dired, etc., maybe make window grid automatically size based on the number of windows and fill in any extra with a blank buffer.
     Also, bury the buffer and unmark the selected items.
  ** HyControl: FRAMES mode - Should f/F clone frames rather than windows?
  ** See if can get {C-c \} to work as a clickable key sequence.  Need to somehow quote the \ but \\ doesn't work either.
  ** Add Smart Key support to Magit.
  ** Smart-helm: Eventually need to add to manual but don't do it until global mouse key support is a standard part of helm.el.
  ** HyControl issues: i,j,k,m is a little off.  With l, the left edge moves just to the left of the screen; bottom edge is moving below dock and when bounce between j and k, the top and bottom of the frame keep moving down.
  ** IDEAS from Emacs Wiki-like software, freex: https://github.com/gregdetre/emacs-freex
  
As a result, Freex mode has a variety of handy features for taking notes:

Automatically creates hyperlinks as you type to any 'nuggets' (i.e. files) in your database of that name.

Any nugget can be 'tagged' as a member of another nugget (del.icio.us-style). This sounds weird, but it becomes intuitive very quickly. Simply put, a nugget can belong to multiple categories. Those categories don't have any special ontological status - they're just other nuggets.

Any nugget can embed the content from other nuggets (which can in turn embed other nuggets) right inside the buffer, like Matryoshka dolls. This means that you can have compound documents that incorporate smaller fragments easily. You can edit embedded nuggets, and they will be saved as you'd expect. A nugget can be embedded in multiple places. Also known as transclusion.

Freex is a minor mode, so you can run it in conjunction with (e.g.) Emacs Muse mode, to benefit from Muse's sophisticated publishing abilities. Unfortunately, Freex doesn't always play as nicely with other modes, so your mileage may vary.

Powerful querying syntax, that allows you to easily create queries like 'list all the nuggets that belong to both 'emacs' and 'python', and contain the term "sql"'. The really cool part is that you get instantaneous tab-completion, so Freex will list all the nuggets matching your query so far, as well as suggesting further categories to whittle down your search. Also known as 'faceted' or 'guided search'.

Freex actually combines the best of both tagging and hierarchy, by allowing second-level tagging (i.e. tags that are tagged with other tags).
  ** IDEA: Do tiled frame layout equiv to hycontrol-make-windows-grid.
  ** In <(hui-menu-hywconfig)>, need to add a menu filter to show existing named wconfigs for deletion or restoration.  Should also add similar commands for frame-configs/framesets in the Frame submenu.
  ** topwin.py: pip install pyobjc-framework-Quartz to install it.
     Maybe optimize further for drags within the same window if frame-auto-raise parameter is non-nil on selected frame (may have been done already).
  ** <(hmouse-window-at-absolute-pixel-position)> runs 'topwin.py' and does expensive computation to find if Emacs frame was the top window at point of release.
     In script, add these tests: Error if not on macOS or if Quartz library is not available.  Note if you run into error No module named Quartz, then run
  ** IDEA: For example, the [Bullet Journal](www.bulletjournal.com) you reference in your blog is an interesting idea that could be built straightforwardly in digital form using Hyperbole capabilities. We will think about that and how we might provide something like that if org-mode does not already cover it.
  ** IDEA: HyControl mode where left hand stays on keyboard and just uses the home row keys and those above and below on the left of the keyboard to manipulate things until {q} is pressed; right hand is on the mouse selecting windows, frames, modelines, etc. upon which to operate.
  ** IDEA: Augment modeline popup menu with specific frame and window commands that operate on the selected one.  For commands that require two windows, provide a way to click on each one.
  ** IDEA: In HyControl, make screen and windows into minor modes with lighters in modeline; maybe reverse modeline when mode is active so eventually can allow help message in minibuffer to be turned off.
  ** IDEA: Smart Key lock.  A command, such as in HyControl, can lock the Smart Keys, then either one executes the locked command on each key press until the other Smart Key is pressed and then it exits this mode.  Would allow for rapid window/frame creation, deletion, size adjustment with the mouse.  Question is, how do you know when to initiate locking and will the user forget and be confused when he tries to use normal Smart Key.  Probably should colorize modeline to emphasize the lock.
  ** IDEA: HyControl - add undo of window and frame moves and resizes.
  ** IDEA: Add in rapid keys for window resizing and positioning outside of HyControl mode:
     hycontrol-frame-percentage-of-screen

     Allow prefix args or when none, prompt for arg to use.

     Frame Quadrants: Pick a number of columns and rows of frames and then display that number tiled on screen using existing frames first and overlaying extras that may exist.
     Limit to 6 columns by 6 rows so frames are not microscopic.

     Useful screen percentage dimensions (x,y) to work with:
     25% = .25W,1H; 33.3% = .333W,1H; 50% = .50W,1H; 66.6% = .666W,1H; 75% = .75W,1H; 100% = 1W,1H

     Frame Menu: Equalize Position Resize

     Position Frames
     {p <num>} based on num keypad layout; 0 means don't move.
     {n, ne, nw, s, se, sw, e, w, c (center)}
     Resize Frames
     0 = keep same size
     1 = 50%
     2 = 1/2
     3 = 1/3
     4 = 1/4
     6 = 2/3
     7 = 3/4
     8 = 1/8
     16 = 1/16
     Prefix args of 2, 4, 8, 16 make frame 1/arg % of screen size,
     i.e. 50%, 25%, 12.5%, 6.25%
     Other numbers are used as percentages
     {%, h, w} to adjust both dimensions or just height or width

  ** IDEA: In addition to hkey-debug, have another variable that when enabled shows messages like hkey-debug but does not execute any Hyperbole actions, i.e. just to test clicks and drags and see what they do without visual (just textual) feedback.  Call it hkey-test-context-flag.  If would work like the help function sod where they walk through hkey-alist without running actions.
  ** For mode-lines: See if can provide mouse help as well when on the propertized elements.  Right now the help is often incorrect.
  ** HyControl - see if can have each command set a string that says what unit of measure they work in and then minibuffer help message uses that to show the last used unit, e.g. pixel, column, character.
  ** See if can make hpath:validate and hpath:exists-p handle paths
     with ${var} in them, e.g. (hpath:exists-p "${load-path}/simple.el.gz")
  ** Add new sections from Hyperbole home page to README.md and README.md.html.
  ** Delete explicit buttons in the *scratch* buffer doesn't work right.
  ** Make manual Customize section match the Cust/ menu.
  ** Koutliner {C-c C-m} binding for move-before overrides hui-select-thing global binding; maybe use a b binding.
     Koutliner {C-c g} goto-cell overrides BW personal global grep binding.
  ** Koutliner Transpose cells, if active region, use it independent of prefix arg of 0
  ** Koutliner Implement transpose trees as move 1st tree, then 2nd
  ** hkey-init-override-local-keys (should -override- names change to -inhibit names?)
  ** Does kcell-view:create have to call (klabel:format klabel) on all labels or just labels of "0" as it does now?
  ** <(Ftp and Git Source Code-only Downloads)> - change to first point to browseable savannah archive and then github.
  ** In kotl-mode, create an indirect-buffer with {C-x 4 c} and then collapse and expand some trees and the indirect-buffer will become unnarrowed, exposing everything.  Need some way to force it to re-narrow after each view edit or fix this bug.
  ** Add hyperbole-readme.txt to distribution for copying to parent directory when installed as an elpa package.
     This is what '?' in package-mode will show.  Though "(elisp)Multi-file Packages" shows that the long description is formed from the README file in the distribution.  We actually have the description in HY-ABOUT with a pointer from README, so we'll have to fix that.
  ** Make a second git command that shows all partial matches for file names
     in an occur-like or next-error-like buffer and lets you jump to them.
  ** In buffer menu, ibuffer menu and helm, maybe make eob action key
     clicks exit the menu.
  ** <(hmouse-key-release-args-emacs)> can be found there for editing.
  ** Emacs drag and mouseUp handling:
     <(Reduces some drags to a click)>
     <(FocusIn and Mouse Event Generation)>
     <(Button Release Event Handling)>
     <(macOS mouseUp handler)>
  ** <(Test)>
  ** These functions are all relevant to finding window of mouse position:
        coordinates-in-window-p in window.c
	mouse-autoselect-window-select in window.el
        mouse-pixel-position in frame.c
	mouse-position
	popup-menu-normalize-position in menubar.el
	posn-at-point

     From "(elisp)Focus Events":
     A focus event in the middle of a key sequence would garble the
sequence.  So Emacs never generates a focus event in the middle of a key
sequence.  If the user changes focus in the middle of a key
sequence—that is, after a prefix key—then Emacs reorders the events so
that the focus event comes either before or after the multi-event key
sequence, and not within it.
	
     So the release of Smart Keys is missing the focus-in event that
     occurs when a drag ends in a new frame because Emacs has not yet
     generated it and switched frames; additionally, the drag end
     event has the frame of the depress, not of the release.

  ** Add a flag to inhibit hui-select (default is off), so for people
     who do not want transient-mark-mode enabled, they can make it so.
  ** Under GNU Emacs and a window system, use <left-fringe>
     <right-fringe> event indicators to know when clicking on a vertical
     scrollbar or window edge in hui-window.el.  Drags are not working
     when started on a fringe.
  ** Document use and add as option to Koutline menus:
     (kotl-mode:auto-shrink-region-flag): Added with default value of nil.
       When enabled, automatically shrinks the region to within a single cell
       before edit commands. 
     Possibly document and add to Koutline menu: kotl-mode:tab-flag
     Possibly and add to Koutline menu: kotl-mode:tab-flag
      kotl-mode:refill-flag, 
  ** Make Emacs text property-like buttons (not pushbuttons) work with the Action Key.
     Figure out how to support Emacs non-button clickable text,
     e.g. cross-refs in Info mode (Hyperbole already handles these but
     just as an example). 
        Emacs allows for the definition of buffer regions that
	represent "clickable text", see "(elisp)Clickable Text".  One
	type of clickable text is a button which can be
	programmatically activated (have its action executed) with the
	push-button function.

	But there does not seem to be a function to programmatically
	activate other types of clickable text.  This is a suggestion
	that such a function be added to Emacs.  It would be similar
	to push-button but would account for all the ways clickable
	text can be activated.  Right now it appears that non-button
	clickable text can be activated essentially only
	interactively, e.g. with a press of RET or mouse-2 or
	invocation of their key bindings.  But that is only one of
	many possible ways of activating clickable text.

	There is a function, mouse-on-link-p, that determines if the
	given position is within clickable text, but there is no
	corresponding activation function.
  ** Make updates to HY-WHY.kotl and write more.  When we start announcing it, I'd like to have a series of
     one liners describing features that attract interest.  For
     example:
     "Create a library of documents, link them on-the-fly and
     retrieve any one at the touch of a button containing its short
     id;" "Full-text search for any contact-related information across
     thousands of contacts in under a second;" and "Use the fantastic
     Koutliner auto-numbered outliner with per-item links and rapidly
     changeable views."

  ** Fix news and mail support.
  ** Look at how can move 'hyperbole' function from hui-mini.el to hyperbole.el.
  ** Managing todos in the Koutliner by setting state attributes
     (assigned, done) and adjusting node faces based on attributes.

     On Thu, Aug 4, 2016 at 8:59 AM, Robert Weiner <rsw@gnu.org> wrote:
     For now, I would create a command that you can bind to a key and
     invoke that when you want the highlighting applied unless you
     want to try using something like post-command-hook.  We could
     also look at adding pre- and post- hooks to the Koutliner
     knode:set-attr and knode:remove-attr functions.

  file:///Users/bk/sw-dev/emacs/hyperbole-6.0.1/man/hyperbole.html#Questions-and-Answers

  ** wm.el has some good ideas for potential integration with HyControl:
       https://www.youtube.com/watch?v=5bZ0zVUNylk
  ** http://bulletjournal.com/get-started/ - Might be useful to
     integrate into Hyperbole
    *** The function `window-in-direction' introduced in Emacs 24.1 now
    takes additional arguments for specifying a reference point, wrapping
    selection around frame borders, and specifying ways to select the
    minibuffer window.

    +++
    *** New commands `toggle-frame-fullscreen' and `toggle-frame-maximized',
    bound to <f11> and M-<f10>, respectively.

    *** `fit-window-to-buffer' can now resize windows in both dimensions.
    This behavior is controlled by the new option
    `fit-window-to-buffer-horizontally'.  The new option
    `fit-frame-to-buffer' allows to fit the window's frame to its buffer.

    *** `fit-frame-to-buffer' now fits frames in both dimensions.  The new
    options `fit-frame-to-buffer-margins' and `fit-frame-to-buffer-sizes'
    control the size of the frame and its position on screen.

    ---
    *** Temp Buffer Resize Mode can now adjust height and width of windows
    and frames.  `temp-buffer-resize-mode' is now able to adjust the height
    and the width of a window displaying a temporary buffer.  The new option
    `temp-buffer-max-width' allows to control the width of temporary buffer
    windows.  Moreover, if the new option `fit-frame-to-buffer' is non-nil
    and the buffer appears in the root window of a frame, Temp Buffer Resize
    Mode will try to adjust width and/or height of the frame.

  ** Potentially make ftp and github downloads installable and
     runnable; update INSTALL.
  ** See about using the Emacs primitive file-remote-p in hpath.el.
  ** Maybe add 'How to Support' file.
  ** Extend ibut for hashtags.
        Maybe add slack:  
         https://<organization>.slack.com/messages/#<channel>/
         https://<organization>.slack.com/messages/<channel>/details/

       Twitter user names are alphanumeric and _.  They can start with an _.  Limited to 15 characters.
       Facebook user names: Usernames can only contain alphanumeric characters (A-Z, 0-9) or a period (".").
       Periods (".") and capitalization don't count as a part of a username. For example, johnsmith55, John.Smith55 and john.smith.55 are all considered the same username.
       Usernames must be at least 5 characters long and can't contain generic terms or extensions (ex: .com, .net).
       Instagram: Limit - 1-30 characters.  Username must contains only letters, numbers, periods and underscores.
         - Case insensitive; displays as all lowercase; twitter uses mixed case.
         - Adding a dot changes your username. Many short usernames are now available since they have not been claimed ex. "a.a" 
         - First/last character of your username cannot be a dot 
         - Multiple dots next to each other are not allowed ex: "a..a"
  ** Need to make this conditional on whether invoked from a menu, hui:htype-help-current-window,
     since if we use the Action Key on a menu sequence key binding, we want displays to go to
     another window by default.  This is used when displaying lists of Types/ for example.
  ** Deal with this Org mode incompatibility with Hyperbole's Smart Keys.
     (org-defkey org-mode-map [(meta return)]       'org-meta-return)
  ** Email Lars and see if we supply the patch, if he will put Hyperbole button data handling into
     the mainline Gnus distribution.
  ** Add hycontrol, drags and hui-select to DEMO.
  ** Create a V5 Koutliner format that stores a single readable form of attribute-value pairs that require no special settings.
     Also, store new negative-positive cell status list and then when read, reset view to exactly as it was when saved.
  ** Publish to savannah.gnu.org, Elpa, Melpa and Github.

  ** 11.7 Announcing Releases

    http://www.gnu.org/prep/maintain/maintain.html

    When you have a new release, please make an announcement. For official
    new releases, including those made just to fix bugs, we strongly
    recommend using the (moderated) general GNU announcements list,
    info-gnu@gnu.org. Doing so makes it easier for users and developers to
    find the latest GNU releases. On the other hand, please do not
    announce test releases on info-gnu unless it’s a highly unusual
    situation.

    Please also post release announcements in the news section of your
    Savannah project site. Here, it is fine to also write news entries for
    test releases and any other newsworthy events. The news feeds from all
    GNU projects at savannah are aggregated at http://planet.gnu.org (GNU
    Planet), unless the text of the entry contains the string
    ‘::noplanet::’. You can also post items directly, or arrange for feeds
    from other locations; see information on the GNU Planet web page.

    You can maintain your own mailing list (typically
    ‘info-package@gnu.org’) for announcements as well if you like. For
    your own list, of course you decide as you see fit what events are
    worth announcing. (See Mail, for setting this up, and more suggestions
    on handling mail for your package.)

    When writing an announcement, please include the following:

    A very brief description (a few sentences at most) of the general purpose of your package.
    Your package’s web page (normally ‘http://www.gnu.org/software/package/’).
    Your package’s download location (normally
    ‘http://ftp.gnu.org/gnu/package/’). It is also useful to mention the
    mirror list at http://www.gnu.org/order/ftp.html, and that
    ‘http://ftpmirror.gnu.org/package/’ will automatically redirect to a
    nearby mirror.
    The NEWS (see NEWS File in GNU Coding Standards) for the present release.
    You may find the announce-gen script useful for creating
    announcements, which is available from the build-aux/ directory of the
    gnulib project at http://savannah.gnu.org/projects/gnulib.

    ----
    2.3 Manuals on Web Pages

    The web pages for the package should include its manuals, in HTML,
    DVI, Info, PDF, plain ASCII, and the source Texinfo. All of these can
    be generated automatically from Texinfo using Makeinfo and other
    programs. If the Texinfo itself is generated from some other source
    format, include that too.

    When there is only one manual, put it in a subdirectory called manual;
    the file manual/index.html should have a link to the manual in each of
    its forms.

    If the package has more than one manual, put each one in a
    subdirectory of manual, set up index.html in each subdirectory to link
    to that manual in all its forms, and make manual/index.html link to
    each manual through its subdirectory.

    See the section below for details on a script to make the job of
    creating all these different formats and index pages easier.

    We would like to list all GNU manuals on the page
    http://www.gnu.org/manual, so if yours isn’t there, please send mail
    to webmasters@gnu.org, asking them to add yours, and they will do so
    based on the contents of your manual directory.

    • Invoking gendocs.sh:	  	
    Up: Manuals on Web Pages   [Contents][Index]

    12.3.1 Invoking gendocs.sh

    The script gendocs.sh eases the task of generating the Texinfo
    documentation output for your web pages section above. It has a
    companion template file, used as the basis for the HTML index
    pages. Both are available from the Gnulib development:

    http://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh
    http://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template
    There is also a minimalistic template, available from:

    http://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template_min
    Invoke the script like this, in the directory containing the Texinfo source:

    gendocs.sh --email yourbuglist yourmanual "GNU yourmanual manual"
    where yourmanual is the short name for your package and yourbuglist is
    the email address for bug reports (which should be
    bug-package@gnu.org). The script processes the file yourmanual.texinfo
    (or .texi or .txi). For example:

    cd .../texinfo/doc
    # download gendocs.sh and gendocs_template
    gendocs.sh --email bug-texinfo@gnu.org texinfo "GNU Texinfo manual"
    gendocs.sh creates a subdirectory manual/ containing the manual
    generated in all the standard output formats: Info, HTML, DVI, and so
    on, as well as the Texinfo source. You then need to move all those
    files, retaining the subdirectories, into the web pages for your
    package.

    You can specify the option -o outdir to override the name manual. Any
    previous contents of outdir will be deleted.

    The second argument, with the description, is included as part of the
    HTML <title> of the overall manual/index.html file. It should include
    the name of the package being documented, as shown. manual/index.html
    is created by substitution from the file gendocs_template. (Feel free
    to modify the generic template for your own purposes.)

    If you have several manuals, you’ll need to run this script several
    times with different arguments, specifying a different output
    directory with -o each time, and moving all the output to your web
    page. Then write (by hand) an overall index.html with links to them
    all. For example:

    cd .../texinfo/doc
    gendocs.sh --email bug-texinfo@gnu.org -o texinfo texinfo "GNU Texinfo manual"
    gendocs.sh --email bug-texinfo@gnu.org -o info info "GNU Info manual"
    gendocs.sh --email bug-texinfo@gnu.org -o info-stnd info-stnd "GNU info-stnd manual"
    By default, the script uses makeinfo for generating HTML output. If you prefer to use texi2html, use the --texi2html command line option, e.g.:

    gendocs --texi2html -o texinfo texinfo "GNU Texinfo manual"
    The template files will automatically produce entries for additional
    HTML output generated by texi2html (i.e., split by sections and
    chapters).

    You can set the environment variables MAKEINFO, TEXI2DVI, etc., to
    control the programs that get executed, and GENDOCS_TEMPLATE_DIR to
    control where the gendocs_template file is found.

    As usual, run ‘gendocs.sh --help’ for a description of all the
    options, environment variables, and more information.

    Please email bug reports, enhancement requests, or other
    correspondence about gendocs to bug-texinfo@gnu.org.

* Hyperbole Post-6.0 Release Todos
** Buttons
  *** Make the Action Key do more when in a debbugs issue summary listing buffer.  Click on a status should filter to that status only; click on a name should filter to that names issues only.  Otherwise, just display the issue clicked on.

  *** Change over explicit buttons to use Emacs "(elisp)Clickable Text" properties.  This will take over highlighting
     and mouse support.

  *** There is as yet no means of transferring explicit buttons among
    buffers. We realize this is a critical need.  Users should be able to
    manipulate text with embedded buttons in ordinary ways.  With this
    feature, Hyperbole would store the button attributes as text
    properties within the buffers so that if a button is copied, its
    attributes follow.  When a buffer is saved, the attributes also will
    be saved.
  *** Make smart-* actions that contain a (cond) tie in with HyDebug by
     creating a special cond macro.
  *** Make hui-select handle emacs pushbuttons and selecting entire
     ebuts and ibuts after word and identifier selection.
  *** Maybe document hib-doc-id.el and show its use in the manual.

** Distribution
  *** Rename Hyperbole files to use hy prefix.
  *** Get list of changes needed to add as a package included with Emacs distributions.
  *** Make Hyperbole a global minor mode that can be toggled on and off.
  *** Add a hyperbole-unload-function to uninstall Hyperbole via Emacs unload feature.
  *** Add hyperbole-inhibit-move-and-copy-drags variable, default to
     nil, and conditionalize both mouse and keyboard predicates for
     kill, copy and yanks on this var.
  *** Maybe change local-write-file-hooks to write-file-functions or use before-save-hook.
  *** Add 'understatement' command which deinitializes Hyperbole,
     removing all menus and key bindings, restoring old ones.  Need to
     deal with the keys that are not bound via hkey-global-*.
     Emacs now has an unloading feature for libraries.  See "(elisp)Unloading".
  *** Initialization might be better performed in a global minor mode
      (which will be autoloaded). Example: semantic-mode.
      This is a good idea, so I will add it to the todo list.  It
      would be a lot of work to be able to turn Hyperbole on and off
      with one command but doable.  We also want to eventually add an
      unload command for Hyperbole as well.


** Doc
     Comment out InfoDock references in manual until it is modernized and released:
        (progn (find-file "~/sw-dev/emacs/hyperbole/man/hyperbole.texi") (occur "InfoDock"))
** Keys
  *** Add an appendix summarizing Hyperbole key bindings for quick reference.
  *** Look into using (posn-col-row (posn-at-point)) under GNU Emacs to handle drag emulation events under a tty emacs.
  *** When Hyperbole removes local keys that block the Smart Keys,
     store these for later restore if desired.
  *** Look at using mouse keys as modifiers for commands, for quick
     window and view changes.  Wrote this in hmouse-mod.el years ago.
  *** Integrate hideshow.el minor-mode code block show/hide capability
     with the Smart Keys.
  *** Emacs modes that already bind shift-mouse-2 (none seem to use shift-mouse-3).
     Here are the modes I found that bind shift-mouse-2.  None seem to
     bind shift-mouse-3.  Most would never be used by many people,
     aside from org-mode and browse-url, so we would just have to try
     to get them to change that those 2 bindings and we would be set.
     Basically, the way the mouse keys are setup, we would need to do
     a symbol replace/macro to change the key bound whenever the key
     binding function is called (which we do now).
  *** Add smart key support for allout.el outlining mode (included in Emacs) and look at
     integrating some of its features like in-buffer encryption and cycling through trees
     into Hyperbole.   https://www.emacswiki.org/emacs/AllOut
  *** When using HyControl, make minibuffer help messages selectable with the Action Key.
     Then make a modeline click possible invoke HyControl.
  ** Added frame-control ^ key to iconify frames but under OSX Emacs, because of the event loop we use,
     iconifying is 100 times slower than normal.  Figure it out some time later.
  ** Other modes that use the shift-mouse-2 button.  None use shift-mouse-3.
    -*- mode: grep; default-directory: "/Applications/Emacs25.app/Contents/Resources/lisp/" -*-
    Grep started at Wed Jun  8 11:34:56

    grep -insIHSZr --include="*.el" --include="*.el.gz" -e '\[S-mouse-2\]' .
    ./dframe.el.gz:223:    (define-key map [S-mouse-2] 'dframe-power-click)
    ./menu-bar.el.gz:2526:    (define-key map [S-mouse-2] 'tty-menu-prev-item)
    ./mpc.el.gz:1117:    (define-key map [S-mouse-2] 'mpc-select-extend)
    !! ./net/browse-url.el.gz:71:;;      (global-set-key [S-mouse-2] 'browse-url-at-mouse)
    ./net/goto-addr.el.gz:47:;;     (define-key m [S-mouse-2] 'goto-address-at-point)
    ./nxml/nxml-mode.el.gz:406:    (define-key map [S-mouse-2] 'nxml-mouse-hide-direct-text-content)
    !! ./org/org-mouse.el.gz:878:		(org-defkey org-mode-map [S-mouse-2] 'org-mouse-yank-link)
    ./progmodes/verilog-mode.el.gz:14068:      (define-key map [S-mouse-2]   'mouse-yank-at-click))

** Koutliner
  *** If possible, fix moved line count in <(kfill:forward-line)>
  *** Add viewspec application to rest of koutline, a single tree, a region
  *** Use "(elisp)Indirect Buffers" to produce multiple views of one outline.
  *** Koutliner needs some work, especially when switching label types
     and then editing, especially star outlines.  Can't demote/promote
     these because their prefix is not an absolute id.  Maybe remove
     stars and partial labels as options.  Promotion/demotion of
     idstamps doesn't work either.
  *** Allow for copying trees in and out of koutlines using the kimport and kexport
     features but implement with simpler UI as kotl-mode cmds.
  *** Add Kotl/ submenus for use when in a Koutline buffer.
  *** When use {C-c l} to create a klink with a referent in the same
     buffer, add the permanent reference cell id in addition to the
     relative id.
  *** Add branch handling commands (all cells at same level).
  *** Add copying a single cell without its subtree.
  *** Add replacing one cell or one tree with another.
  *** Add transposing two trees, rather than two cells.
  *** Add title to 0 kcell and use when export to HTML.
  *** Support faces on different outline levels.
  *** Finish implementing viewspec codes listed in kvspec.el.
  *** Viewspec changes (many kotl-mode commands) are not saved to undo
  history, so can't undo them.
  *** Should viewspecs be enforced when hiding and showing cells?
  Right now they are not.  Might make it hard to show the full
  contents of one cell if only a certain number of lines per cell are
  set.

** Modes
  *** Change help buffer window config. storage to hidden named ones so
     can restore for each help buffer rather than last one, if Hyperbole
     does use multiple help buffers.
  *** Try to rename smart- symbols more Hyperbole-like (these
     originally started in the Smart Menu package.
  *** Python mode:  See if can tie with extensive elpy package for tag
     finding and other OO-Browser-like functions.  Emacs Python
     Development Environment: https://github.com/jorgenschaefer/elpy

** Remote file access
  *** Make hpath:at-p match to these urls:
       www.gnu.org
       ftp:/user@gnu.org:50
       ftp:/user@gnu.org:50/my/path
       ftp://user@gnu.org:50/my/path
       "http//www.plasmas.biz:5050/my/path"
  *** Rework find-file-urls in hyperbole.el
  *** Test with EWW as the internal web browser.

** Rolo
  *** Allows for rolo-logic queries over the BBDB file.
  *** Add a rolo-file matching alist used to set rolo-entry-regexp and
  rolo record display function, so for example any file with 'bbdb' in
  its name uses the bbdb vector format and then extracts fields for display.
  *** Add LDAP support as suggested by Raman:
     On Thu, Jun 16, 2016 at 11:38 AM, raman <raman@google.com> wrote:
     Another thought re contact  management -- LDAP support in Emacs has been
     hard to configure -- EUCD fell by the wayside for nearly 10 years, and
     ldapsearch.el only supported older versions of LDAP. About a year or
     more ago there was some work done on EUDC, but getting EUDC to talk to
     various LDAP servers is still somewhat  of a black art --- and this gets
     worse when encountering LDAP servers that have security configured
     ---it's a complete mystery as to how to set up authentication. Getting
     some of this abstracted away by hyrolo would make it a really nice
     front-end -- especially if one could achieve consistency across LDAP and BBDB.

     This could be done, though authentication these days is always a bit difficult.
     We would need a test LDAP server though and corporate sponsorship for  such work
     wouldn't be a bad idea either :-)  I will add it to the new feature wishlist for now as a
     good idea.

     See this wiki page for EUDC status:

     https://www.emacswiki.org/emacs/EUDC

     Bob


** User Interface
  *** When use Remove-this-Menu on Hyperbole menu, it sets smail:comment (defined in hsmail.el) to the empty string.  Restore its default value if it is the empty string whenever the Hyperbole menu is added back, e.g. when the minibuffer menu is invoked.
  *** Integrate with org-mode and todo-mode.
  *** May want to add menu support for calling hypb:debug to debug Hyperbole button type problems.
  *** Create frame-config menus equiv. to wconfig one, fconfig.el and add it to the menus.
  *** Assist Key click in minibuffer menu prefix displays help for the whole menu.
  *** Change any further names for defcustoms.
  *** Improve hhist.el and hycontrol.el to store Window Configurations and Frame Configurations.
      Use frameset.el and 'frameset-save' included with Emacs to store a wconfig or fconfig.
      Need to use desktop.el to save associated buffers first.
      Also try: persp-mode.el (Melpa package) - named perspectives(set of buffers/window configs) for emacs
    Persisting/saving window configurations
      The builtin window-state-get and windo-state-put functions could
      also be useful.
      In Emacs25, have (window-absolute-pixel-position), give x,y
      screen coords.

    The objects returned by current-window-configuration die together with the Emacs process. In order to store a window configuration on disk and read it back in another Emacs session, you can use the functions described next. These functions are also useful to clone the state of a frame into an arbitrary live window (set-window-configuration effectively clones the windows of a frame into the root window of that very frame only).

    Function: window-state-get &optional window writable
    This function returns the state of window as a Lisp object. The argument window must be a valid window and defaults to the root window of the selected frame.

    If the optional argument writable is non-nil, this means to not use markers for sampling positions like window-point or window-start. This argument should be non-nil when the state will be written to disk and read back in another session.

    Together, the argument writable and the variable window-persistent-parameters specify which window parameters are saved by this function. See Window Parameters.

    The value returned by window-state-get can be used in the same session to make a clone of a window in another window. It can be also written to disk and read back in another session. In either case, use the following function to restore the state of the window.

    Function: window-state-put state &optional window ignore
    This function puts the window state state into window. The argument state should be the state of a window returned by an earlier invocation of window-state-get, see above. The optional argument window can be either a live window or an internal window (see Windows and Frames) and defaults to the selected one. If window is not live, it is replaced by a live window before putting state into it.

    If the optional argument ignore is non-nil, it means to ignore minimum window sizes and fixed-size restrictions. If ignore is safe, this means windows can get as small as one line and/or two columns.

** Defcustoms
      See list of defcustom samples <(there)>
    (defcustom org-babel-load-languages '((emacs-lisp . t))
      "Languages which can be evaluated in Org-mode buffers.
    This list can be used to load support for any of the languages
    below, note that each language will depend on a different set of
    system executables and/or Emacs modes.  When a language is
    \"loaded\", then code blocks in that language can be evaluated
    with `org-babel-execute-src-block' bound by default to C-c
    C-c (note the `org-babel-no-eval-on-ctrl-c-ctrl-c' variable can
    be set to remove code block evaluation from the C-c C-c
    keybinding.  By default only Emacs Lisp (which has no
    requirements) is loaded."
      :group 'org-babel
      :link (info-link "(hyperbole)")
      :package-version 
      :set 'org-babel-do-load-languages
      :package-version (Hyperbole . "5.15")
      ;; Emacs Version first introduced or changed
      :version "24.1"
      :type '(alist :tag "Babel Languages"
		    :key-type
		    (choice
		     (const :tag "Awk" awk)
		     (const :tag "C" C)
		     (const :tag "R" R)
		     (const :tag "Asymptote" asymptote)
		    :value-type (boolean :tag "Activate" :value t)))



* Hyperbole links
  ** HyControl demo is at "https://youtu.be/M3-aMh1ccJk".
  ** A short video introduction to the Find/Web menu may be found at https://youtu.be/8lMlJed0-OM.

* Hyperbole relevant info
  ** Emacs support for clickable: https://www.gnu.org/software/emacs/manual/html_node/elisp/Clickable-Text.html
  ** https://en.wikipedia.org/wiki/Fragment_identifier describes extensive hash syntax for URIs.
  ** HTML link anchors are case-sensitive; markdown ones are case insensitive.
       In Github Markdown: [Text](pathname#my-name) links to a section, ### My Name, in optional pathname.
       	  	 	   [Text][my-id] links to a line that starts with up to 3 spaces and my-id: url.

   Its main distribution site is: https://www.gnu.org/software/hyperbole.

* Hyperbole Web Page Updates

    [–]ws-ilazki 1 point 29 minutes ago* 

    That would help, but I think what you really need is a slightly
    different layout on https://www.gnu.org/software/hyperbole/ that
    lets you present the information differently. It's written in an
    essay style, with TOC->preface->body, and that's not going to
    catch people's attention very well at first.

    It's just my opinion, but I think a better way to present it would
    be to start with a What is Hyperbole? section that gives a short,
    single-paragraph "elevator pitch", followed by a bullet point list
    of stand-out features, with links to further information about
    each feature. Your first paragraph in the summary section would be
    a good place to start.

    Example (using some data from the existing summary):

    What is Hyperbole?

    GNU Hyperbole is an efficient and programmable information
    management system implemented as a GNU Emacs package. It is a
    toolkit and user interface for viewing, retrieving and
    interlinking all kinds of textual information.

    Some features of Hyperbole:
      Easy management of Emacs windows and frames.
      Convenient hotkeys to manage, save, and reload Emacs window configurations
      Powerful outlines with auto-renumbering, easy movement of entries, link creation, and more.
      Powerful searching lets you find what you're looking for in emacs, on your filesystem, and even online using major search engines.
      User configurable. In addition to built-in button types, it's easy to create new ones that can do many things, such as link to a file.
      Universal interface.  Hyperbole works everywhere in Emacs, creating a consistent interface to access and reference your information.

    This is just an example based on some information from the current
    summary and your comment.  It might not be completely accurate
    since I was trying to paraphrase the summary points to be
    succinct, but it should still illustrate my point. There's
    probably other, even more compelling things to put in there, I
    just haven't used it to be able to suggest any extra things to
    note. You could check some comments from this and the previous
    thread that describe what users found interesting about it,
    though. That would be a good source of what sort of bullet points
    would attract user interest.

    Ideally, each bullet point would have a link to another page with
    additional information about that feature, preferably with
    screenshots of that feature in use. This would give you a way to
    give people a quick impression of what the package does and
    hopefully improve interest and click-through to other parts of the
    site.

    The problem isn't that you lack useful information on the site,
    it's that it's presented in a way that isn't helpful to people
    that don't know what Hyperbole is and don't know if they want to
    spend more time learning about it. You need a quick way to get
    your hooks into the reader and make them want to learn more. A
    page with screenshots and some kind of tour would also help, but
    I'd say that's secondary to having a clear elevator pitch and some
    bullet points. You want to generate enough interest to get them to
    read more and check the screenshots section.

    [–]rswgnu 1 point a minute ago 

    You are a very good writer. The "What is Hyperbole?" section is
    nice and clear, as is your final paragraph about what you think is
    needed. This is great feedback.

    So you think the What is Hyperbole? should either precede or
    supercede the table of contents and should provide the links to
    sections about each part of hyperbole, each with screenshots,
    possibly videos and additional links. Is that about right?

    [–]ws-ilazki 1 point 54 minutes ago 

    Thanks! It was sort of off-the-cuff so I'm sure it could still use some improvement, though. :)

    I think that kind of TL;DR attention-grabber should be the first
    thing people see, so I'd say it should precede the TOC. I couldn't
    do it here, but it would probably help to move up that screenshot
    (currently below the TOC) into the "What is Hyperbole?" section as
    well, so you have your bullet list and a visual together.

    Also, you understood correctly about the links suggestion. A
    common way sites do this is to have the main page also contain all
    the detailed information, farther down, and have the links jump to
    that section.

    Another way to do it is to have a separate "Features" page that
    has the detailed info, screenshots, etc. It could be divided up
    into separate parts for each feature, and the "What is Hyperbole?"
    links could link to the corresponding Features section.

    Either way, the idea is that once you hook the person, they can
    also choose to just scroll through a full page to get info and
    visuals together. Each sub-section would be like a self-contained
    mini-document on that feature, with a TL;DR explanation, a visual,
    and then more detail if necessary.

    Sorry if I'm not clear on what I mean with any of that, it's hard
    to communicate hypothetical site layouts clearly in a Reddit
    comment.

* From my Reddit writing:

https://www.reddit.com/r/emacs/comments/7c5ry8/question_to_hyperbole_users_whats_your_workflow/
  This is a writeup of things RSW depends on Hyperbole for.

Here are some potential workflows to try (all of this is built in to the GNU Hyperbole package, downloadable from the package manager within Emacs):
Personal Button File: Create a personal file of hyperbuttons to quickly navigate through any projects you want. Use {C-h h b p} to create or display your personal button file (like a quick access home page). You add Hyperbole buttons in here. You can create explicit buttons that link from this file to another by simply dragging from you button file's window to another window (within Emacs). Or you can add implicit buttons such as URLs, pathnames, Info node references and then simply press {M-RET} (the Action Key) to activate any of them; no markup involved. If you press, {C-h A} on any of these buttons you can see what they do before you activate them.
Code Navigation: Use the implicit button features of Hyperbole with the {M-RET} key to follow references within code after creating TAGS files for each of your projects. Hyperbole will automatically search up directory trees, find the right TAGS file for the current project and automatically use it. Or add explicit buttons in comments that display any kind of information you want.
Code Selection: If in a buffer of any major language that uses braces, parentheses or other paired delimiters, press {M-RET} on the opening or closing character and Hyperbole will select the entire enclosed construct. For C-based languages, a whole function will be selected if on the function's opening or closing brace.
Contact Database: Use the HyRolo contact manager {C-h h r} to quickly add contacts and group them by organization so you can find all people in an organization or department. Regular expression and logical queries are supported. Contacts from the BBDB Emacs package can also be displayed, if you use that.
Brainstorm: Use the Koutliner to automatically number and structure your ideas. When finished, you can share the outline or hyperlink to any entry and then refer to the specific entry number, e.g. 1.4.3.8 when discussing it with others.
Manage your Display: Use HyControl to rapidly manipulate your Emacs windows and frames to get the exact layout you want and then recall that layout later within your Emacs session. (A future release of Hyperbole will make these configurations persistent).
See the Hyperbole DEMO file, {C-h d d} for even more ideas.

-----

I am the author of GNU Hyperbole so I use it all the time. Once in
awhile I will start Emacs without Hyperbole loaded and it very quickly
feels like it is missing many features that speed my editing and
information retrieval.

A major new release of Hyperbole should be out in about a week with
many advancements, so have a look for that and assume anything
mentioned here pertains to that release. The announcement will
summarize all the new features.

Things I depend on all the time:

The Smart Keys are two context-sensitive mouse key (or keyboard key)
bindings that execute actions based on the textual context in which
they are pressed, finding patterns in text that operate as
hyperbuttons (called implicit buttons in Hyperbole).  So instead of
having 20 different bindings for 20 major and minor modes, you have
one global binding that does the right thing in many different
contexts. This reduces learning time and lets you just press a Smart
Key in many contexts.  A help key always shows you what the Smart Keys
will do in any context, so you can ensure things will work as you like
before activating any implicit button.

Advanced examples of Smart Key usage include:

- displaying pathnames with Lisp or environment variables in them and
  having them display in external applications if desired;

- creating explicit button hyperlinks by dragging from a source buffer
  to a destination buffer; this can even create links to files on
  remote servers; the hyperlink is then available for immediate use,
  no markup required

- activating links to git and github files and other object types,
  such as pull requests

- jumping to source code definitions (utilizing several different
  cross-reference packages) without having to know any specifics about
  how to do the lookup

- displaying bug/issue discussions in debbugs and github

- copying and moving structured entities, e.g. double quoted text,
  brace delimited sections, HTML tag pair entities, with quick mouse
  drags

- navigating through files in a package MANIFEST file

- writing a few lines of Lisp to create a new implicit button type and
  being able to then immediately activate matching implicit buttons
  within any documents desired; for example, "RFC-822" is a built-in
  implicit button to Hyperbole that when pressed upon: retrieves the
  Internet RFC specified and makes its table of contents live so you
  can jump to any section you want immediately.

- HyRolo is an easy-to-use but advanced contact manager and record
  lookup tool (now with BBDB and Google Contacts support). Contacts
  can be spread across multiple files and use different formats if
  desired. Hyperbole buttons can be embedded in entries and activated
  from the buffer of search matches. HyRolo files are Emacs outlines,
  so they can be quickly collapsed and re-organized in standard ways.

- The Koutliner is the only Emacs outliner that has dynamic
  multi-level node numbering, e.g. 1.4.3.2 or 1d3b, as well as
  permanent hyperlink anchors for each node as well as view
  specifications that affect the outline view when included in
  hyperlinks. It is great for todo lists, brainstorming, requirement
  documents or anything that needs detailed structure.

- HyControl lets one rapidly arrange his windows and frames as desired.
  Together with Smart Key drags, one can drag items from the buffer menu
  or dired to any window or swap buffers instantly.

  A great new feature is window grids; they lay out a series of
  windows in rows and columns with buffers chosen from either a
  current buffer list, a single major mode or selected items from the
  buffer menu or dired; try it to really understand the value.

Hyperbole is mainly about productivity and using the intrinsic
relationships among pieces of information whether in code or text.
The combination of its facilities can improve your ability to get work
done in Emacs dramatically.  The included Hyperbole interactive DEMO
covers much of this.  Practice with it and see your speed with Emacs
soar across your first week of use and continue to improve after
that.



* OO-Browser Todos
  ** For C++, look at using https://github.com/Andersbakken/rtags which also has an Emacs interface; also interfaced to counsel and ivy.
  ** RTags, https://github.com/Andersbakken/rtags, is a client/server application that indexes C/C++ code and keeps a persistent file-based database of references, declarations, definitions, symbolnames etc. There’s also limited support for ObjC/ObjC++. It allows you to find symbols by name (including nested class and namespace scope). Most importantly we give you proper follow-symbol and find-references support.  Rtags uses Clang, which is: The goal of the Clang project is to create a new C based language front-end: C, C++, Objective C/C++, OpenCL C and others for the LLVM compiler.  https://clang.llvm.org
  ** Ycmd, https://github.com/Valloric/ycmd, a code-completion & code-comprehension server with an Emacs client interface.
  ** Check out dict-tree package if want quick text searching for additional OO-Browser annotations; https://elpa.gnu.org/packages/dict-tree.html
  ** Change from lmenu.el to easymenu.el; search for all delete-menu-item (doesn't work under Emacs) and replace; although Changes file in OO-Browser indicates this was done for 5.0.1, the code is still there (was there a reversion somewhere?).  lmenu.el is still in Emacs but has been obsolete for a long time.
  ** Look at Emacs integrations of Microsoft's multi-language client-server parser
     protocol http://langserver.org/.
  ** Look at integrating gettext into tree-x.
  ** DONE: Ask mentors@gnu.org for help on generating a configure/automake
     script.  You could also try the autoconf users list autoconf@gnu.org.
  ** Add "how to" support document for package.
  ** Add defcustoms
  ** Update headers to GNU standard.
  ** Figure out how to build ootags, xoobr and oobr.exe as part of the Emacs package
     installation.
  ** Get old OO-Browser deleted from emacsattic on Github and from sf.net.
  ** Look at integrating with RTags for C/C++ full parsing: https://github.com/Andersbakken/rtags


    Pre-Context       Action Context         Action              Region Loc       Paste Loc
    =======================================================================================
    No Region         Thing Drag             Copy/Kill Region    hkey-value & mark  Release
    Region            Drag in Window         Error               N/A
    No Region         Drag in Window         Depends on drag     N/A
    Region            Drag between Windows   Create ebut link    pre-depress & mark
    No Region         Drag between Windows   Create ebut link    N/A

    No Region         Click in Window        context-specific    N/A
    Region            Click in Window        Copy/Kill Region    hkey-value & mark  Release


    Anytime you add a new Hyperbole link type, you need to update <(hui:link-possible-types)>.
    Org Mode link handling, see: "TODO-ORG-TEST.org"
	 http://orgmode.org/manual/Link-abbreviations.html#Link-abbreviations
	 http://orgmode.org/manual/Using-links-outside-Org.html#Using-links-outside-Org

    Elpa package publishing:
    http://git.savannah.gnu.org/gitweb/?p=emacs/elpa.git;a=blob;f=README;h=57d9ca9f1d03f7555f396b655820cd70894dac5a;hb=HEAD

    Hyperbole Elpa pointer to tar archive: https://elpa.gnu.org/packages/hyperbole.html

* People who could do Hyperbole videos
  ** Creating screencasts: https://www.emacswiki.org/emacs/EmacsScreencasts
  ** http://pragmaticemacs.com/ - blog written by an astrophysicist
     professor at the U. of Bristol, Dr Ben Maughan <ben.maughan@bristol.ac.uk> who uses Org-mode
  ** Mike Zamansky - CS Professor who has done a bunch of Emacs videos - http://cestlaz.github.io/Stories/about/
       BW emailed him and he said he would take a look
  ** Noufal Ibrahim - noufal@gmail.com noufal@emacsmovies.org (He is in Calicu, India):
       http://emacsmovies.org/blog/2012/01/21/welcome_to_emacsmovies.org/   
       http://nibrahim.net.in/
       See also his showkeys program: http://nibrahim.net.in/2011/11/30/showkeys.html

* Org Mode mailing list archive:
    http://lists.gnu.org/archive/html/emacs-orgmode

* InfoDock Release Todos
** Replace these with Tramp Equivalents
    grep -insIHSZr --exclude="*~" --exclude="#*" --exclude="TAGS" -e 'efs-' .
    ./id-lisp/misc/em-config.el:301:			      (or (and (or (featurep 'efs-auto)
    ./id-lisp/misc/em-config.el:303:				       (boundp 'efs-path-root-regexp)
    ./id-lisp/misc/em-config.el:304:				       (string-match efs-path-root-regexp
    ./id-lisp/site/site-var.el:39:(defun id-efs-name-buffer (host user file)
    ./id-lisp/site/site-var.el:42:(setq efs-fancy-buffer-names 'id-efs-name-buffer)
    ./id-lisp/site/site-var.el:60:   'efs-load-hook
    ./id-lisp/site/site-var.el:65:     (setq efs-default-user "anonymous")
    ./id-lisp/site/site-var.el:66:     (setq efs-default-password
    ./id-lisp/site/site-var.el:69:     (setq efs-gateway-host "maniac")
    ./id-lisp/site/site-var.el:71:     (setq efs-gateway-type'(proxy efs-ftp-program-name efs-ftp-program args))
    ./id-lisp/site/site-var.el:72:     ;; (setq efs-smart-gateway-port "")
    ./id-lisp/site/site-var.el:73:     (setq efs-ftp-local-host-regexp
    ./id-lisp/site/site-var.el:1122:	    url-gateway-local-host-regexp efs-local-host-regexp

* Handy code for use with Hyperbole

;; list of all windows in all frames from topmost frame to bottommost
(apply #'nconc (mapcar #'window-list (frame-list-z-order)))

(add-hook 'clone-indirect-buffer-hook
	  (lambda ()
	    (if (eq major-mode 'kotl-mode)
		;; Re-initialize kotl-mode for cloned buffer
		;; Ensures buffer is properly narrowed.
		(kotl-mode))))

(hibtypes-git-find "helm/helm-find.el")
"/Users/bk/Documents/GitHub/helm/helm-find.el"

(add-hook 'post-command-hook
	  (lambda () (if (mouse-event-p last-command-event)
			 (message "Selected frame = %s" (selected-frame)))))
((lambda nil (if (mouse-event-p last-command-event) (message "Selected frame = %s" ...))) winner-save-old-configurations)


(defun e ()
  (interactive)
  (let ((e (read-event)))
    (track-mouse
      (while e
	(message "Event = %s" e)
	(if (and (listp e) (string-match "drag" (symbol-name (car e))))
	    (setq e nil)
	  (setq e (read-event)))))))

(defun a ()
  (interactive)
  (let ((pos (popup-menu-normalize-position nil)))
    (message "Click pos is: %s" pos)
    pos))

(defun b ()
  (interactive)
  (let* ((mouse-position (mouse-position))
	 (window
	  (ignore-errors
	    (window-at (cadr mouse-position) (cddr mouse-position)
		       (car mouse-position)))))
    (when window
      (let ((coords (coordinates-in-window-p (cdr mouse-position) window))
	    (buffer (window-buffer window)))
	(message "Click pos is: %s" (list buffer window coords)))
      window)))

(defun c ()
  (interactive)
  (message "%s" (mouse-position)))

(defun d ()
  (if (mouse-event-p last-command-event)
      (message "(post-command-hook): selected-frame = %s; mouse-position = %s"
  (selected-frame) (mouse-position))))
(remove-hook 'post-command-hook 'd)
(defalias 'e (symbol-function 'handle-switch-frame))
(defun handle-switch-frame (event)
  (interactive "e")
  (message "(handle-switch-frame): Event is: %s" event)
  (message "(handle-switch-frame): Before selected frame is: %s" (selected-frame))
  (e event)
  (message "(handle-switch-frame): After selected frame is: %s" (selected-frame)))


* Hyperbole 7.0.3 release todos:
  ** DONE: Fix filename and path ordering error when
           path contains a variable and a hash anchor.
           Example: "${hyperb:dir}/DEMO#POSIX and MSWindows Paths"
  ** DONE: Change hpath:map-plist to hypb:map-plist before gets used elsewhere.
           Change in HY-NEWS too.
  ** DONE: Document in DEMO
           In hpath.el, need to do the reverse of expand-abbrev when convert mount points back to Windows shares.
  ** DONE: {M-o i <window-id>} when not on an item creates an explicit button but if called from within the middle of a line, it moves to the beginning of the line before inserting the explicit button.  It is moving between windows and losing original point location.



;; Local Variables:
;; eval: (outline-minor-mode 1)
;; eval: (modify-syntax-entry ?: "_")
;; End:
