branch: externals/hyperbole
commit f098816abd7a13af62e226d43d81f2edf5a70002
Author: bw <[email protected]>
Commit: bw <[email protected]>
Add hsys-flymake.el; fix text-toc actype and {C-u C-h A}
---
ChangeLog | 39 +++++++++++++
MANIFEST | 1 +
Makefile | 6 +-
hact.el | 30 +++++-----
hactypes.el | 21 ++++---
hbdata.el | 10 ++--
hbut.el | 34 +++++++++---
hib-debbugs.el | 16 +++---
hibtypes.el | 23 ++++++--
hmail.el | 4 +-
hmouse-drv.el | 31 +++++++----
hmouse-key.el | 4 +-
hsys-flymake.el | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++
hui-mouse.el | 80 ++++++++++++++++-----------
hui.el | 5 +-
hyperbole.el | 4 +-
kotl/kfill.el | 4 +-
man/hkey-help.txt | 1 +
man/hyperbole.texi | 11 +++-
man/version.texi | 4 +-
20 files changed, 377 insertions(+), 111 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 00ed751672..5bf51c6255 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2024-01-03 Bob Weiner <[email protected]>
+
+* hib-debbugs.el (declare-function): Revert declarations to use
+ "ext:debbugs-gnu" from "ext:debbugs" since the newer package
+ does not have many of the functions that Hyperbole presently uses.
+
+* MANIFEST:
+ man/hkey-help.txt:
+ man/hyperbole.texi (Implicit Button Types):
+ hibtypes.el (hsys-flymake):
+ Makefile (EL_COMPILE): Add "hsys-flymake.el" to Hyperbole.
+
+2024-01-02 Bob Weiner <[email protected]>
+
+* hibtypes.el (text-toc): Fix doc on whitespace handling before and after
+ TOC header and TOC entry lines.
+ hactypes.el (text-toc): Fix not handling different whitespace in TOC
+ entry vs. section header.
+
+* hui.el (hui:hbut-help): Return custom button help function symbol if any;
+ otherwise, return the function used, 'hbut:report. This is used in
+ Smart Key help which previously was not displaying the proper action
+ for the Assist Key when on a Hyperbole button.
+ hmouse-drv.el (hkey-help): Update to display proper Assist Key help.
+
2024-01-01 Bob Weiner <[email protected]>
* hypb-ert.el (hypb-ert-def-at-p): Update doc. Fix grouping ref that was
@@ -6,6 +31,20 @@
2023-12-31 Bob Weiner <[email protected]>
+* hbut.el (ibut:create, ibut:at-p): Change to call 'smart-eolp' instead of
+ 'eolp' so can handle flymake issues where an overlay/char-property is
+ added at the end of a line only and we want an implicit button created
+ for this.
+
+* hui-mouse.el (hkey-alist): Add logic for new hsys-flymake library to handle
+ diag issues at the end of the line where we want an implicit button to
+ fire rather than typicaly eol handling.
+
+* hbut.el (ibtype:test-p, ibtype:act): Add these to mirror actype functions.
+ (ibtype:elisp-symbol): Add alias similar to existing actype one. So
+ that (ibtype:act <ibtype-sym-or-name>) executes the ibtype action if the
+ current buffer context supports it.
+
* hyrolo.el (hyrolo-file-list): Add 'hyrolo-set-file-list' after loading the
hyrolo
library (at the end of the file) if 'hyrolo-file-list' has been set by the
user or the customization system prior to loading HyRolo.
diff --git a/MANIFEST b/MANIFEST
index 071a9be605..3b57d005ab 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -99,6 +99,7 @@ topwin.py - Python script to find the topmost
macOS app window at a s
.hypb & _hypb - Button data files used by the GNU Hyperbole DEMO file
* --- EXTERNAL SYSTEM ENCAPSULATIONS ---
+hsys-flymake.el - Add missing source buffer keymap to flymake linter
hsys-org.el - GNU Hyperbole support functions for Org mode
hsys-org-roam.el - GNU Hyperbole support functions for Org Roam
hsys-www.el - GNU Hyperbole support for Emacs W3 World-Wide Web (WWW)
browsing
diff --git a/Makefile b/Makefile
index f4582528e8..291cf6300a 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
# Author: Bob Weiner
#
# Orig-Date: 15-Jun-94 at 03:42:38
-# Last-Mod: 4-Dec-23 at 01:18:04 by Bob Weiner
+# Last-Mod: 3-Jan-24 at 03:06:38 by Bob Weiner
#
# Copyright (C) 1994-2023 Free Software Foundation, Inc.
# See the file HY-COPY for license information.
@@ -182,8 +182,8 @@ EL_COMPILE = hact.el hactypes.el hargs.el hbdata.el
hbmap.el hbut.el \
hib-social.el hibtypes.el \
hinit.el hload-path.el hmail.el hmh.el hmoccur.el hmouse-info.el \
hmouse-drv.el hmouse-key.el hmouse-mod.el hmouse-sh.el
hmouse-tag.el \
- hpath.el hrmail.el hsettings.el hsmail.el hsys-org.el
hsys-org-roam.el \
- hsys-www.el hsys-youtube.el htz.el \
+ hpath.el hrmail.el hsettings.el hsmail.el hsys-flymake.el
hsys-org.el \
+ hsys-org-roam.el hsys-www.el hsys-youtube.el htz.el \
hycontrol.el hui-jmenu.el hui-menu.el hui-mini.el hui-mouse.el
hui-select.el \
hui-treemacs.el hui-window.el hui.el hvar.el hversion.el hypb.el
hyperbole.el \
hyrolo-demo.el hyrolo-logic.el hyrolo-menu.el hyrolo.el
hywconfig.el set.el hypb-ert.el \
diff --git a/hact.el b/hact.el
index 75ff81dc20..516b8ed5b7 100644
--- a/hact.el
+++ b/hact.el
@@ -3,11 +3,11 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 18-Sep-91 at 02:57:09
-;; Last-Mod: 7-Nov-23 at 21:38:28 by Bob Weiner
+;; Last-Mod: 3-Jan-24 at 02:32:30 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 1991-2022 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2024 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
@@ -25,10 +25,10 @@
;;; Public declarations
;;; ************************************************************************
-(declare-function hattr:get "hypb")
-(declare-function hattr:list "hypb")
-(declare-function hattr:set "hypb")
-(declare-function hbut:is-p "hypb")
+(declare-function hattr:get "hbut")
+(declare-function hattr:list "hbut")
+(declare-function hattr:set "hbut")
+(declare-function hbut:is-p "hbut")
(declare-function hpath:absolute-arguments "hpath")
(declare-function hypb:indirect-function "hypb")
@@ -126,7 +126,8 @@ with the `ibtypes::' prefix and one without. The value for
both
keys is the Elisp symbol for the type, which includes the prefix.")
(defsubst symtable:actype-p (symbol-or-name)
- "Return SYMBOL-OR-NAME if a Hyperbole action type or Elisp function, else
nil."
+ "Return Elisp symbol for SYMBOL-OR-NAME if a Hyperbole action type.
+May also be an Elisp function. Otherwise, return nil."
(when (or (symbolp symbol-or-name) (stringp symbol-or-name))
(or (symtable:get symbol-or-name symtable:actypes)
(and (stringp symbol-or-name) (fboundp (intern-soft symbol-or-name))
@@ -134,14 +135,14 @@ keys is the Elisp symbol for the type, which includes the
prefix.")
(and (functionp symbol-or-name) symbol-or-name))))
(defsubst symtable:hyperbole-actype-p (symbol-or-name)
- "Return SYMBOL-OR-NAME if a Hyperbole action type, else nil.
+ "Return Elisp symbol for SYMBOL-OR-NAME if a Hyperbole action type, else nil.
This excludes Emacs Lisp functions which may be used as action types.
Use `actype:elisp-symbol' to include these."
(when (or (symbolp symbol-or-name) (stringp symbol-or-name))
(or (symtable:get symbol-or-name symtable:actypes))))
(defsubst symtable:ibtype-p (symbol-or-name)
- "Return SYMBOL-OR-NAME if it is a Hyperbole implicit button type, else nil."
+ "Return Elisp symbol for SYMBOL-OR-NAME if it is a Hyperbole ibtype, else
nil."
(when (or (symbolp symbol-or-name) (stringp symbol-or-name))
(symtable:get symbol-or-name symtable:ibtypes)))
@@ -154,8 +155,9 @@ Caller must ensure SYMBOL-OR-NAME is a symbol or string."
(defalias 'symtable:delete #'symtable:remove)
(defun symtable:get (symbol-or-name symtable)
- "Return Hyperbole SYMBOL-OR-NAME if it is in SYMTABLE, else nil.
-Caller must ensure SYMBOL-OR-NAME is a symbol or string."
+ "Return Elisp symbol for Hyperbole SYMBOL-OR-NAME if it is in SYMTABLE.
+Otherwise, return nil. Caller must ensure SYMBOL-OR-NAME is a symbol
+or string."
(symtable:operate #'gethash symbol-or-name symtable))
(defun symtable:remove (symbol-or-name symtable)
@@ -419,9 +421,6 @@ performing ACTION."
t)
(hhist:add hist-elt))))))
-;; Return the full Elisp symbol for ACTYPE, which may be a string or symbol.
-(defalias 'actype:elisp-symbol #'symtable:actype-p)
-
(defun actype:def-symbol (actype)
"Return the abbreviated symbol for ACTYPE used in its `defact'.
ACTYPE must be a symbol or string that begins with `actype::' or nil
@@ -432,6 +431,9 @@ is returned."
(when (string-match "\\`actypes::" name)
(make-symbol (substring name (match-end 0))))))
+;; Return the full Elisp symbol for ACTYPE, which may be a string or symbol.
+(defalias 'actype:elisp-symbol #'symtable:actype-p)
+
(defun actype:eval (actype &rest args)
"Perform action formed from ACTYPE and rest of ARGS and return value.
This differs from `actype:act' in that it can return nil and does not
diff --git a/hactypes.el b/hactypes.el
index f881cca010..6c937a4233 100644
--- a/hactypes.el
+++ b/hactypes.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 23-Sep-91 at 20:34:36
-;; Last-Mod: 28-Dec-23 at 11:55:42 by Bob Weiner
+;; Last-Mod: 3-Jan-24 at 01:34:28 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -749,13 +749,18 @@ Optional SECTIONS-START limits toc entries to those after
that point."
SECTION is a string and can be just the leading part of a section heading."
(interactive "sGo to section named: ")
(when (stringp section)
- (actypes::link-to-regexp-match
- (concat "^[ \t]*" (regexp-quote section))
- 2 (current-buffer) t))
- (while (and (= (forward-line -1) 0)
- (looking-at "[ \t]*[-=][-=]")))
- (forward-line 1)
- (recenter 0))
+ (setq section (string-trim section))
+ (if (string-match "\\`\\(\\*+\\)[ \t]*" section)
+ (actypes::link-to-regexp-match
+ (concat "^[ \t]*" (regexp-quote (match-string 1 section))
+ "[ \t]*" (regexp-quote (substring section (match-end 0))))
+ 2 (current-buffer) t)
+ (actypes::link-to-regexp-match (concat "^[ \t]*" (regexp-quote section))
+ 2 (current-buffer) t))
+ (while (and (= (forward-line -1) 0)
+ (looking-at "[ \t]*[-=][-=]")))
+ (forward-line 1)
+ (recenter 0)))
(provide 'hactypes)
diff --git a/hbdata.el b/hbdata.el
index 884ba82579..3aab8020c9 100644
--- a/hbdata.el
+++ b/hbdata.el
@@ -3,11 +3,11 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 2-Apr-91
-;; Last-Mod: 22-Oct-23 at 14:42:47 by Mats Lidell
+;; Last-Mod: 3-Jan-24 at 02:27:47 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 1991-2021 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2024 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
@@ -76,9 +76,9 @@
(declare-function ebut:label-to-key "hbut")
;; Functions from abstract mail and news interface. See "hmail.el"
-(declare-function lmail:to nil)
-(declare-function rmail:to nil)
-(declare-function rmail:summ-msg-to nil)
+(declare-function lmail:to "hmail")
+(declare-function rmail:to "hmail")
+(declare-function rmail:summ-msg-to "hmail")
;;; ************************************************************************
;;; Public functions
diff --git a/hbut.el b/hbut.el
index 7b9bd40a65..1b6d5862b0 100644
--- a/hbut.el
+++ b/hbut.el
@@ -3,11 +3,11 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 18-Sep-91 at 02:57:09
-;; Last-Mod: 30-Dec-23 at 01:38:30 by Bob Weiner
+;; Last-Mod: 3-Jan-24 at 02:31:24 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 1991-2023 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2024 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
@@ -15,6 +15,7 @@
;;; Commentary:
;;; Code:
+
;;; ************************************************************************
;;; Other required Elisp libraries
;;; ************************************************************************
@@ -1709,8 +1710,9 @@ Any named implicit button must contain at least two
characters,
excluding delimiters, not just one."
;; Since the Smart Keys handle end-of-line separately from whether
;; point is within an implicit button, always report not within one
- ;; when point is at the end of a line. -- RSW, 02-16-2020
- (unless (eolp)
+ ;; when point is at the end of a line unless `flymake-mode' has added
+ ;; an issue annotation there. -- RSW 02-16-2020, 12-31-2023
+ (unless (smart-eolp)
;; Check for an implicit button at current point, record its
;; attributes in memory and return a button symbol for it.
(when (ibut:create)
@@ -1875,9 +1877,10 @@ If a new button is created, store its attributes in the
symbol,
(setq name-and-lbl-key-flag nil))
;; Since the Smart Keys handle end-of-line and end-of-buffer
;; separately from whether point is within an implicit button,
- ;; always report not within one when point is at the end of a line.
- ;; -- RSW, 02-16-2020 and 07-17-2022
- (unless (or is-type (eolp) (eobp))
+ ;; always report not within one when point is at the end of a line
+ ;; except when there is a `flymake-mode' issue annotation there.
+ ;; -- RSW 02-16-2020, 07-17-2022 and 12-31-2023
+ (unless (or is-type (smart-eolp) (eobp))
(unwind-protect
(progn (when (or but-sym-flag name-and-lbl-key-flag)
(setq text-start (or (hattr:get 'hbut:current
'lbl-start)
@@ -2889,6 +2892,12 @@ type for ibtype is presently undefined."
[&optional ["&optional" arg &rest arg]]
&optional ["&rest" arg])))
+(defun ibtype:act (ibtype)
+ "Execute IBTYPE's action in contexts where `ibtype:test-p' is true."
+ (let ((elisp-sym (ibtype:elisp-symbol ibtype)))
+ (when elisp-sym
+ (funcall elisp-sym))))
+
(defalias 'ibtype:create #'defib)
(defun ibtype:activate-link (referent)
@@ -3075,6 +3084,13 @@ Return TYPE's symbol if it existed, else nil."
(symtable:delete type symtable:ibtypes)
(htype:delete type 'ibtypes))
-(provide 'hbut)
+;; Return the full Elisp symbol for IBTYPE, which may be a string or symbol.
+(defalias 'ibtype:elisp-symbol #'symtable:ibtype-p)
-;;; hbut.el ends here
+(defun ibtype:test-p (ibtype)
+ "Return t if IBTYPE would activate in the current buffer context, else nil."
+ (let ((elisp-sym (ibtype:elisp-symbol ibtype))
+ (hrule:action #'actype:identity))
+ (and elisp-sym (funcall elisp-sym) t)))
+
+(provide 'hbut)
diff --git a/hib-debbugs.el b/hib-debbugs.el
index 78d17f5d87..4898bcc713 100644
--- a/hib-debbugs.el
+++ b/hib-debbugs.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 21-Jun-16 at 14:24:53
-;; Last-Mod: 30-Dec-23 at 00:13:19 by Bob Weiner
+;; Last-Mod: 3-Jan-24 at 03:06:43 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -11,7 +11,7 @@
;; See the "HY-COPY" file for license information.
;;
;; This file is part of Hyperbole. It requires the Emacs package
-;; Debbugs 0.9.7 or higher; there were bugs in earlier versions
+;; debbugs-gnu 0.9.7 or higher; there were bugs in earlier versions
;; that made it incompatible with the queries Hyperbole issues.
;;
;;; Commentary:
@@ -77,11 +77,11 @@
;;; Public declarations
;;; ************************************************************************
-(declare-function debbugs-get-status "ext:debbugs")
-(declare-function debbugs-gnu-bugs "ext:debbugs")
-(declare-function debbugs-gnu-current-id "ext:debbugs")
-(declare-function debbugs-gnu-select-report "ext:debbugs")
-(declare-function debbugs-gnu-show-reports "ext:debbugs")
+(declare-function debbugs-get-status "ext:debbugs-gnu")
+(declare-function debbugs-gnu-bugs "ext:debbugs-gnu")
+(declare-function debbugs-gnu-current-id "ext:debbugs-gnu")
+(declare-function debbugs-gnu-select-report "ext:debbugs-gnu")
+(declare-function debbugs-gnu-show-reports "ext:debbugs-gnu")
(defvar debbugs-gnu-current-query)
(defvar debbugs-port)
@@ -263,7 +263,7 @@ Return t unless no attributes are printed."
"Return t iff debbugs version is sufficient for use with Hyperbole.
Must be greater than equal to 0.9.7."
(save-excursion
- (let* ((debbugs-src (locate-file "debbugs" load-path '(".el")))
+ (let* ((debbugs-src (locate-file "debbugs-gnu" load-path '(".el")))
(visiting-debbugs-src (when debbugs-src (get-file-buffer
debbugs-src)))
debbugs-src-buffer
version)
diff --git a/hibtypes.el b/hibtypes.el
index 00ccf856d9..a3e81f9ed7 100644
--- a/hibtypes.el
+++ b/hibtypes.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 19-Sep-91 at 20:45:31
-;; Last-Mod: 28-Dec-23 at 18:27:19 by Bob Weiner
+;; Last-Mod: 3-Jan-24 at 01:38:08 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -87,6 +87,16 @@
;; them. Use load instead to ensure are reloaded when resetting
;; ibtype priorities.
+;;; ========================================================================
+;;; Keymap with repeat and source buffer control for flymake code linter
+;;; ========================================================================
+
+(load "hsys-flymake")
+
+;;; ========================================================================
+;;; Jumps to source line from Python traceback lines
+;;; ========================================================================
+
(defib python-tb-previous-line ()
"Move to prior line with potential Python line ref.
In Python, tracebacks may be on a line just below the source
@@ -623,11 +633,12 @@ anything."
"Jump to the text file section referenced by a table of contents entry at
point.
Buffer must be in a text mode or must contain DEMO, README or
TUTORIAL and there must be a `Table of Contents' or `Contents'
-label on a line by itself (it may begin with an asterisk),
-preceding the table of contents. Each toc entry must begin with
-some whitespace followed by one or more asterisk characters.
-Each section header linked to by the toc must start with one or
-more asterisk characters at the very beginning of the line."
+label on a line by itself (it optionally may begin with an
+asterisk), preceding the table of contents. Each toc entry must
+begin with optional whitespace followed by one or more asterisks.
+Each section header linked to by the toc must start with optional
+whitespace and then one or more asterisks at the beginning of the
+line."
(let (section)
(when (and (or (derived-mode-p 'text-mode)
(string-match "DEMO\\|README\\|TUTORIAL" (buffer-name)))
diff --git a/hmail.el b/hmail.el
index cce7a37d3d..877b4dc25a 100644
--- a/hmail.el
+++ b/hmail.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 9-Oct-91 at 18:38:05
-;; Last-Mod: 3-Oct-23 at 23:30:56 by Mats Lidell
+;; Last-Mod: 3-Jan-24 at 02:26:11 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -35,7 +35,7 @@
;;; Public declarations
;;; ************************************************************************
-(declare-function rmail:msg-widen nil)
+(declare-function rmail:msg-widen "hmail")
(declare-function hypb:insert-region "hypb")
;;; ************************************************************************
diff --git a/hmouse-drv.el b/hmouse-drv.el
index 8029f951b5..fa7f3822f4 100644
--- a/hmouse-drv.el
+++ b/hmouse-drv.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 04-Feb-90
-;; Last-Mod: 27-Dec-23 at 00:52:16 by Bob Weiner
+;; Last-Mod: 3-Jan-24 at 02:24:39 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -59,7 +59,7 @@
(defvar action-key-default-function) ; defcustom hui-mouse
(defvar assist-key-default-function) ; defcustom hui-mouse
-(declare-function mouse-drag-frame nil) ;; Obsolete from Emacs 28
+(declare-function mouse-drag-frame "mouse") ;; Obsolete from Emacs 28
(declare-function hkey-quit-window "hmouse-drv") ; Alias defined in this file.
@@ -1146,7 +1146,8 @@ documentation is found."
(if (eq categ 'explicit) actype categ))
(if (eq categ 'explicit) "EXPLICIT"
"IMPLICIT")))
(hattr:report attributes)
- (unless (or (eq categ 'explicit)
+ (unless (or assisting
+ (eq categ 'explicit)
(null categ)
(not (fboundp categ))
(null (documentation categ)))
@@ -1154,13 +1155,23 @@ documentation is found."
(princ (format "\n%s\n"
(replace-regexp-in-string "^" " "
(documentation categ)
nil t))))
- (when (and (symbolp actype)
- (fboundp actype)
- (documentation actype))
- (princ (format "\n%s ACTION SPECIFICS:\n%s\n"
- (or (actype:def-symbol actype) actype)
- (replace-regexp-in-string "^" " "
(documentation actype)
- nil t))))))
+ (if assisting
+ (let ((type-help-func (or (intern-soft
+ (concat (htype:names
'ibtypes categ)
+ ":help"))
+ 'hbut:report)))
+ (princ (format "\n%s ASSIST SPECIFICS:\n%s\n"
+ type-help-func
+ (replace-regexp-in-string
+ "^" " " (documentation
type-help-func)
+ nil t))))
+ (when (and (symbolp actype)
+ (fboundp actype)
+ (documentation actype))
+ (princ (format "\n%s ACTION SPECIFICS:\n%s\n"
+ (or (actype:def-symbol actype)
actype)
+ (replace-regexp-in-string "^" " "
(documentation actype)
+ nil
t)))))))
;; Print Emacs push-button attributes
(when (memq cmd-sym '(smart-push-button
smart-push-button-help))
diff --git a/hmouse-key.el b/hmouse-key.el
index 8934c9f3f2..11005a2e79 100644
--- a/hmouse-key.el
+++ b/hmouse-key.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 30-May-94 at 00:11:57
-;; Last-Mod: 3-Oct-23 at 17:10:05 by Mats Lidell
+;; Last-Mod: 3-Jan-24 at 02:29:03 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -37,7 +37,7 @@
(defvar hyperbole-mode-map) ; "hyperbole.el"
-(declare-function hkey-initialize "hbut")
+(declare-function hkey-initialize "hyperbole")
(declare-function hmouse-get-bindings "hmouse-sh")
(declare-function hmouse-unshifted-setup "hmouse-sh")
(declare-function hmouse-shifted-setup "hmouse-sh")
diff --git a/hsys-flymake.el b/hsys-flymake.el
new file mode 100644
index 0000000000..a4a1ce61d5
--- /dev/null
+++ b/hsys-flymake.el
@@ -0,0 +1,160 @@
+;;; hsys-flymake.el --- Add missing source buffer keymap to flymake linter
-*- lexical-binding: t; -*-
+;; Usage: GNU Emacs Lisp Library
+;; Keywords: tools
+;;
+;; Author: Bob Weiner
+;; Org: RWorks
+;; E-mail: [email protected]
+;;
+;; Orig-Date: 31-Dec-23 at 13:54:08
+;; Last-Mod: 3-Jan-24 at 03:19:44 by Bob Weiner
+;;
+;; SPDX-License-Identifier: GPL-3.0-or-later
+;;
+;; Copyright (C) 2023-2024 Free Software Foundation, Inc.
+;; Licensed under the GNU General Public License, version 3.
+;;
+;; This file is part of GNU Hyperbole.
+;;
+;;; Commentary:
+;;
+;; These functions all work in the source code buffer, not the flymake
+;; diagnostics buffer.
+;;
+;; We want to load this so the implicit button type defined herein
+;; takes effect, but we don't require `flymake-mode' or
+;; `repeat-mode'. Instead we leave it to each function to check
+;; whether it is enabled and active in the current buffer. This way,
+;; if the user never uses `flymake-mode' that library is never loaded
+;; and the implicit button type never triggers.
+;;
+;;; Code:
+
+;;; ************************************************************************
+;;; Public functions
+;;; ************************************************************************
+
+(defib hsys-flymake-issue-at-point ()
+ "Display the flymake diagnostic issue at source buffer point, if any."
+ (let ((issue (hsys-flymake-get-issue-at-position)))
+ (when issue
+ (ibut:label-set issue)
+ (hact 'message issue))))
+
+(defun hsys-flymake-issue-at-point:help (ibut)
+ "With flymake enabled and point on its highlighted text, insert the issue."
+ (interactive)
+ (let ((issue (car (hattr:get ibut 'args))))
+ (when issue
+ (save-excursion
+ (end-of-visible-line)
+ (insert "\n" issue "\n")))))
+
+(defun hsys-flymake-display-issue-at-point ()
+ "Display the flymake diagnostic issue at source buffer point, if any."
+ (interactive)
+ (let ((issue (hsys-flymake-get-issue-at-position)))
+ (when issue
+ (message issue))))
+
+(defun hsys-flymake-display-log-buffer ()
+ "For flymake backend developers: Display a technical log of flymake actions."
+ (interactive)
+ (when (and (featurep 'flymake) flymake-mode)
+ (display-buffer (get-buffer-create "*Flymake log*"))))
+
+(defun hsys-flymake-get-issue-at-position (&optional pos)
+ "With flymake enabled and POS on its highlighted text, return the issue.
+If no issue at POS, return nil. POS is optional and defaults to point."
+ (when (and (featurep 'flymake) flymake-mode)
+ (let* ((diag (get-char-property (or pos (point)) 'flymake-diagnostic))
+ (issue (when diag (flymake--diag-text diag))))
+ issue)))
+
+(defun hsys-flymake-display-this-or-next-issue ()
+ "Display the source buffer flymake diagnostic at point or else the next one."
+ (interactive)
+ (or (hsys-flymake-display-issue-at-point)
+ (call-interactively 'flymake-goto-next-error)))
+
+(defun hsys-flymake-insert-issue-at-point ()
+ "With flymake enabled and point on its highlighted text, insert the issue.
+Issue is inserted into the buffer after the current visible line."
+ (interactive)
+ (let ((issue (hsys-flymake-get-issue-at-position)))
+ (when issue
+ (save-excursion
+ (end-of-visible-line)
+ (insert "\n" issue "\n")))))
+
+(defun hsys-flymake-toggle ()
+ "Toggle flymake minor mode on or off in the current buffer."
+ (interactive)
+ (flymake-mode 'toggle)
+ (when (called-interactively-p 'interactive)
+ (message "%s flymake-mode" (if flymake-mode "Enabled" "Disabled"))))
+
+(defun hsys-flymake-toggle-wraparound ()
+ "Toggle flymake minor mode on or off in the current buffer."
+ (interactive)
+ (when (and (featurep 'flymake) flymake-mode)
+ (setq flymake-wrap-around (not flymake-wrap-around))
+ (when (called-interactively-p 'interactive)
+ (message "%s flymake-mode next and previous issue search wraparound to
buffer start"
+ (if flymake-wrap-around "Enabled" "Disabled")))))
+
+;;; ************************************************************************
+;;; Key bindings
+;;; ************************************************************************
+
+;; flymake-mode does not bind any keys; it has only menu bindings.
+;; Add key bindings for use in the source buffer on the C-c C-l prefix.
+;; Each time these keys are changed, need to disable repeat-mode and
+;; then re-enable it to read the updated key bindings.
+(defvar hsys-flymake-mode-control-l-prefix-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "d" 'flymake-show-buffer-diagnostics)
+ (define-key map "g" 'hsys-flymake-display-this-or-next-issue)
+ (define-key map "i" 'hsys-flymake-insert-issue-at-point)
+ (define-key map "l" 'flymake-switch-to-log-buffers)
+ (define-key map "n" 'flymake-goto-next-error)
+ (define-key map "p" 'flymake-goto-prev-error)
+ (define-key map "s" 'flymake-start)
+ (define-key map "w" 'hsys-flymake-toggle-wraparound)
+ map))
+
+;; Use repeat-mode for appropriate flymake commands so can repeat them
+;; with their last keystroke, e.g. repeat {C-c C-l n} by pressing {n}
+;; repeatedly.
+(defvar hsys-flymake-repeat-map
+ (let ((map (make-sparse-keymap)))
+ (mapc (lambda (cmd)
+ (define-key map
+ (where-is-internal cmd hsys-flymake-mode-control-l-prefix-map t)
+ cmd)
+ (put cmd 'repeat-map 'hsys-flymake-repeat-map))
+ '(flymake-goto-next-error
+ flymake-goto-prev-error
+ hsys-flymake-toggle-wraparound))
+ map))
+
+(defvar hsys-flymake-mode-control-c-prefix-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map "\C-l" hsys-flymake-mode-control-l-prefix-map)
+ map))
+
+(global-set-key "\C-c\C-lt" 'hsys-flymake-toggle)
+
+(add-hook 'flymake-mode-hook
+ (lambda () (when flymake-mode
+ (define-key flymake-mode-map "\C-c"
+ hsys-flymake-mode-control-c-prefix-map)
+ (repeat-mode 1))))
+;; If flymake-mode is already enabled, re-enable it to ensure
+;; repeat-mode gets enabled.
+(when (and (featurep 'flymake) flymake-mode)
+ (flymake-mode 1))
+
+(provide 'hsys-flymake)
+
+;;; hsys-flymake.el ends here
diff --git a/hui-mouse.el b/hui-mouse.el
index 3f8aa1529f..9ebe758b01 100644
--- a/hui-mouse.el
+++ b/hui-mouse.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 04-Feb-89
-;; Last-Mod: 29-Dec-23 at 23:43:11 by Bob Weiner
+;; Last-Mod: 3-Jan-24 at 02:22:25 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -14,26 +14,25 @@
;;; Commentary:
;;
-;; This code is machine independent. It works best with a pointing device but
-;; may also be used from a keyboard. When used with a pointing device it
+;; This code is machine independent. It works best with a pointing device
+;; but may also be used from a keyboard. When used with a pointing device it
;; requires an Emacs command that sets point to the location of the pointing
;; device's cursor.
;;
;; If you want to use your shift-middle mouse button to select Hyperbole menu
;; items and Hyperbole buttons, follow these instructions.
;;
-;; If you plan to use a mouse only with the X window system or macOS
-;; and you want to use the shift-middle and shift-right buttons, you
-;; need not do any mouse configuration. Your Emacs executable must
-;; have been built so as to include the mouse support files for your
-;; window system, however. These are in the Emacs "src" directory:
-;; for X - "x*.c", for macOS - "ns*.c".
+;; If you plan to use a mouse only with the X window system or macOS and you
+;; want to use the shift-middle and shift-right buttons, you need not do any
+;; mouse configuration. Your Emacs executable must have been built so as to
+;; include the mouse support files for your window system, however. These
+;; are in the Emacs "src" directory: for X - "x*.c", for macOS - "ns*.c".
;;
;; To use a different mouse key or a different window system, modify the
;; mouse key bindings in "hmouse-sh.el".
;;
-;; Using the Action Mouse Key to browse through and delete files from
-;; Dired listings is exceptionally nice, just as it is when reading mail.
+;; Using the Action Mouse Key to browse through and delete files from Dired
+;; listings is exceptionally nice, just as it is when reading mail.
;;; Code:
;;; ************************************************************************
@@ -50,7 +49,7 @@
(require 'hmouse-tag))
(require 'imenu)
(eval-when-compile
- (require 'eieio))
+ (require 'eieio)) ;; magit uses this and thus smart-magit does
(eval-when-compile (require 'tar-mode))
@@ -58,20 +57,7 @@
;;; Public declarations
;;; ************************************************************************
-;; Functions from abstract mail and news interface. See "hmail.el"
-(declare-function lmail:delete nil)
-(declare-function lmail:undelete nil)
-(declare-function rmail:msg-prev nil)
-(declare-function lmail:goto nil)
-(declare-function lmail:expunge nil)
-(declare-function rmail:msg-next nil)
-(declare-function lmail:undelete-all nil)
-
-(declare-function helm-get-actions-from-current-source "ext:helm-core")
-(declare-function helm-get-default-action "ext:helm-core")
-
-(defvar helm-selection-point)
-
+;; Functions from optional, external ert-results package
(declare-function ert-results-filter "ext:ert-results")
(declare-function ert-results-filter-status-p "ext:ert-results")
(declare-function ert-results-display "ext:ert-results")
@@ -80,6 +66,27 @@
(declare-function ert-results-toggle "ext:ert-results")
(declare-function ert-results-describe-test-at-point "ext:ert-results")
+;; Functions from Hyperbole's abstract mail and news interface.
+;; See "hmail.el"
+(declare-function lmail:delete "hmail")
+(declare-function lmail:undelete "hmail")
+(declare-function rmail:msg-prev "hmail")
+(declare-function lmail:goto "hmail")
+(declare-function lmail:expunge "hmail")
+(declare-function rmail:msg-next "hmail")
+(declare-function lmail:undelete-all "hmail")
+
+;; Functions and variables from the helm package
+(declare-function helm-get-actions-from-current-source "ext:helm-core")
+(declare-function helm-get-default-action "ext:helm-core")
+
+(defvar helm-selection-point)
+
+;; Functions from Hyperbole's Koutliner
+(declare-function kotl-mode:eobp "kotl-mode")
+(declare-function kotl-mode:eolp "kotl-mode")
+
+;; Emacs functions
(declare-function tar-flag-deleted "tar")
(declare-function tar-unflag "tar")
(declare-function tar-extract-other-window "tar")
@@ -302,9 +309,7 @@ Its default value is `smart-scroll-down'. To disable it,
set it to
. ((xref-goto-xref) . (xref-show-location-at-point)))
;;
;; If at the end of a line (eol), invoke the associated Smart Key handler
EOL handler.
- ((if (eq major-mode 'kotl-mode)
- (and (not (kotl-mode:eobp)) (kotl-mode:eolp t))
- (smart-eolp))
+ ((smart-eolp)
. ((funcall action-key-eol-function) . (funcall assist-key-eol-function)))
;;
;; The Smart Menu system is an attractive in-buffer menu system
@@ -2076,10 +2081,19 @@ If key is pressed:
(defun smart-eolp ()
"Return t if point is at the end of a visible line but not the end of the
buffer."
;; smart-helm handles eol for helm buffers
- (unless (and (smart-helm-alive-p) (equal (helm-buffer-get) (buffer-name)))
- (and (not (smart-eobp)) (eolp)
- (or (not (smart-outline-char-invisible-p))
- (not (smart-outline-char-invisible-p (1- (point))))))))
+ (unless (or (and (smart-helm-alive-p) (equal (helm-buffer-get)
(buffer-name)))
+ (and (featurep 'hsys-flymake)
+ (boundp 'flymake-mode)
+ flymake-mode
+ (eolp)
+ ;; If there is a flymake diagnostic issue at eol,
+ ;; drop through this clause to handle it later.
+ (hsys-flymake-get-issue-at-point)))
+ (if (eq major-mode 'kotl-mode)
+ (and (not (kotl-mode:eobp)) (kotl-mode:eolp t))
+ (and (not (smart-eobp)) (eolp)
+ (or (not (smart-outline-char-invisible-p))
+ (not (smart-outline-char-invisible-p (1- (point)))))))))
;;; ************************************************************************
;;; smart-push-button functions
diff --git a/hui.el b/hui.el
index 07d98fc489..987864f5e6 100644
--- a/hui.el
+++ b/hui.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 19-Sep-91 at 21:42:03
-;; Last-Mod: 28-Dec-23 at 21:34:45 by Bob Weiner
+;; Last-Mod: 2-Jan-24 at 23:02:06 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -876,7 +876,8 @@ BUT defaults to the button whose label point is within."
(if (functionp type-help-func)
(funcall type-help-func but)
(let ((total (hbut:report but)))
- (when total (hui:help-ebut-highlight))))))
+ (when total (hui:help-ebut-highlight))))
+ (or type-help-func 'hbut:report)))
(defun hui:hbut-label (default-label func-name &optional prompt)
"Read button label from user using DEFAULT-LABEL and caller's FUNC-NAME.
diff --git a/hyperbole.el b/hyperbole.el
index 415b473e33..6e7e7f8dc1 100644
--- a/hyperbole.el
+++ b/hyperbole.el
@@ -8,7 +8,7 @@
;; Maintainer: Mats Lidell <[email protected]>
;; Maintainers: Robert Weiner <[email protected]>, Mats Lidell <[email protected]>
;; Created: 06-Oct-92 at 11:52:51
-;; Last-Mod: 23-Dec-23 at 01:50:36 by Bob Weiner
+;; Last-Mod: 3-Jan-24 at 02:27:05 by Bob Weiner
;; Released: 03-Dec-23
;; Version: 9.0.0
;; Keywords: comm, convenience, files, frames, hypermedia, languages,
mail, matching, mouse, multimedia, outlines, tools, wp
@@ -172,7 +172,7 @@ Info documentation at \"(hyperbole)Top\".
(declare-function hmouse-install "hmouse-key")
(declare-function hui-search-web "hui-mini")
(declare-function hkey-operate "hmouse-drv")
-(declare-function facemenu-keymap nil) ; Where is this defined?
+(declare-function facemenu-keymap "facemenu")
(declare-function hkey-help "hmouse-drv")
(declare-function hkey-either "hmouse-drv")
diff --git a/kotl/kfill.el b/kotl/kfill.el
index e575a7bbb5..759f703c85 100644
--- a/kotl/kfill.el
+++ b/kotl/kfill.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 23-Jan-94
-;; Last-Mod: 3-Oct-23 at 23:27:17 by Mats Lidell
+;; Last-Mod: 3-Jan-24 at 02:28:36 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -20,7 +20,7 @@
;;; Public declarations
;;; ************************************************************************
-(declare-function kcell-view:indent "kcell")
+(declare-function kcell-view:indent "kview")
;;; ************************************************************************
;;; Public variables
diff --git a/man/hkey-help.txt b/man/hkey-help.txt
index a9371c9c62..e8505266f6 100644
--- a/man/hkey-help.txt
+++ b/man/hkey-help.txt
@@ -114,6 +114,7 @@ Hyperbole Key Press/Click in Special Modes
Man Pages Follows cross refs, file refs and C code refs
I/Buffer Menu Saves, deletes and displays buffers
Todotxt Mode Toggles item completion Edit and archive
items
+ Flymake Mode Display issue at point Insert issue on
newline
Emacs Info Reader
Menu Entry or Cross Ref Jumps to referent <- same
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index f155f75238..489bb94f35 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -7,7 +7,7 @@
@c Author: Bob Weiner
@c
@c Orig-Date: 6-Nov-91 at 11:18:03
-@c Last-Mod: 29-Dec-23 at 23:27:32 by Bob Weiner
+@c Last-Mod: 3-Jan-24 at 03:13:18 by Bob Weiner
@c %**start of header (This is for running Texinfo on a region.)
@setfilename hyperbole.info
@@ -156,7 +156,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
<PRE>
Edition 9.0.0
-Printed December 29, 2023.
+Printed January 3, 2024.
Published by the Free Software Foundation, Inc.
Author: Bob Weiner
@@ -198,7 +198,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@example
Edition 9.0.0
-December 29, 2023
+January 3, 2024
Published by the Free Software Foundation, Inc.
Author: Bob Weiner
@@ -2906,6 +2906,11 @@ framework. The @code{test-selector} argument is as
described in
Recognize Action Buttons of the form @code{<hyperbole-run-test
test-name>} which when activated run individual Hyperbole tests, each
given by the @code{<test-name>} argument, an unquoted name.
+
+@findex ibtypes hsys-flymake-issue-at-point
+@item hsys-flymake-issue-at-point
+Display the flymake linter diagnostic issue at source buffer point,
+if any.
@end table
diff --git a/man/version.texi b/man/version.texi
index a01e194cba..417330efc0 100644
--- a/man/version.texi
+++ b/man/version.texi
@@ -1,4 +1,4 @@
-@set UPDATED December, 2023
-@set UPDATED-MONTH December 2023
+@set UPDATED January, 2024
+@set UPDATED-MONTH January 2024
@set EDITION 9.0.0
@set VERSION 9.0.0