branch: externals/hyperbole
commit 729c67cee1b6a6d89373d3de85803f88ea668095
Merge: dbe1f6c13b 0b829ed0e1
Author: bw <[email protected]>
Commit: bw <[email protected]>
Merge branch 'master' into rsw
---
ChangeLog | 47 ++++++
MANIFEST | 1 -
Makefile | 4 +-
hhist.el | 2 +-
hload-path.el | 38 +----
hsys-youtube.el | 2 +-
hui-window.el | 2 +-
hvar.el | 2 +-
hycontrol-zmfrm.el | 159 -------------------
hycontrol.el | 25 +--
hyrolo-logic.el | 2 +-
hyrolo-menu.el | 2 +-
hywiki.el | 4 +-
kotl/klink.el | 2 +-
kotl/kotl-mode.el | 4 +-
smart-clib-sym | 2 +-
test/hib-social-tests.el | 2 +-
test/hmouse-info-tests.el | 9 +-
test/hsettings-tests.el | 2 +-
test/hui-register-tests.el | 2 +-
test/hy-test-helpers.el | 20 +--
test/hyperbole-tests.el | 2 +-
test/hywiki-tests.el | 383 ++++++++++++++++++++++++++++++---------------
test/kcell-tests.el | 10 +-
test/kotl-orgtbl-tests.el | 2 +-
topwin.py | 2 +-
26 files changed, 358 insertions(+), 374 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 55bc7b3b59..16fbf13cab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -16,6 +16,53 @@
(hpath:delimited-possible-path): Check for delimited strings only if
(hypb:in-string-p) returns non-nil.
+2025-10-18 Mats Lidell <[email protected]>
+
+* test/hywiki-tests.el (hywiki-tests--edit): Added cleanup of
+ hywiki-directory after test.
+ (hywiki-tests--only-file-in-dir-p)
+ (hywiki-tests--delete-hywiki-cache)
+ (hywiki-tests--delete-hywiki-dir-and-buffer): Add safer delete of
+ hywiki-directory so removal of a live hywiki-directory is less
+ likely. The dir must be empty and cache is only removed if it is the
+ last file remaining in the dir. Moved these into hywiki-tests since
+ they are only used with managing hywiki-directory in test cleanup and
+ use it through out the hywiki-directory tests.
+
+2025-10-16 Mats Lidell <[email protected]>
+
+* test/hywiki-tests.el (hywiki-tests--consult-grep)
+ (hywiki-tests--hkey-help, hywiki-tests--add-path-link-v2)
+ (hywiki-tests--tags-view, hywiki-tests--directory-dired-edit)
+ (hywiki-tests--interactive-hywiki-mode-toggles): Add hywiki tests.
+
+2025-10-13 Mats Lidell <[email protected]>
+
+* hycontrol.el (hycontrol-frame-zoom, hycontrol-frame-zoom-reset): For
+ Emacs-28 use zoom-frm.el if it is available. Tell user it is required.
+
+* hycontrol-zmfrm.el:
+ Makefile (EL_COMPILE):
+ MANIFEST: Remove hycontrol-zmfrm.el
+
+2025-10-08 Mats Lidell <[email protected]>
+
+* kotl/kotl-mode.el (kotl-mode):
+ hywiki.el (hywiki-add-org-id): Use with-suppressed-warnings.
+
+* hload-path.el (hyperb:with-suppressed-warnings): Remove Emacs 26
+ compatibilty macro. Not needed.
+
+2025-10-06 Mats Lidell <[email protected]>
+
+* test/hy-test-helpers.el (hy-test-helpers:ert-simulate-keys): Silence
+ warnings for not defined vertico-mode.
+
+* test/hmouse-info-tests.el (hmouse-info-build-completions-no-match): Fix
+ unwind-protect with no unwind form.
+ (hy-test-helpers): Require helper functions.
+ (Info-complete-menu-buffer): Define var.
+
2025-10-05 Bob Weiner <[email protected]>
* hsys-www.el (eww-browse-url): Stop overloading this 'eww' function and
replace
diff --git a/MANIFEST b/MANIFEST
index 36b53d7c48..e828abef7b 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -47,7 +47,6 @@ hui-treemacs.el - GNU Hyperbole Smart Key support for
the Treemacs file man
hui-window.el - Smart Mouse Key window and modeline depress/release
actions
hui.el - GNU Hyperbole button and hyperlink user interface
hycontrol.el - Interactive sizing, moving, replicating and deleting of
windows and frames
-hycontrol-zmfrm.el - Global zoom support for Emacs 28
hyrolo-menu.el - Pulldown and popup menus of HyRolo commands
* --- APPLICATION PROGRAMMING INTERFACE ---
diff --git a/Makefile b/Makefile
index 3f8ba633a2..9f004e920e 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
# Author: Bob Weiner
#
# Orig-Date: 15-Jun-94 at 03:42:38
-# Last-Mod: 2-Oct-25 at 21:59:40 by Mats Lidell
+# Last-Mod: 13-Oct-25 at 22:23:24 by Mats Lidell
#
# Copyright (C) 1994-2025 Free Software Foundation, Inc.
# See the file HY-COPY for license information.
@@ -223,7 +223,7 @@ EL_COMPILE = hact.el hactypes.el hargs.el hbdata.el
hbmap.el hbut.el \
hui-treemacs.el hui-window.el hui.el hvar.el hversion.el hynote.el
hypb.el hyperbole.el \
hyrolo-demo.el hyrolo-logic.el hyrolo-menu.el hyrolo.el
hywconfig.el hywiki.el \
hasht.el set.el hypb-ert.el hui-dired-sidebar.el
hypb-maintenance.el \
- hui-register.el hycontrol-zmfrm.el
+ hui-register.el
EL_SRC = $(EL_COMPILE)
diff --git a/hhist.el b/hhist.el
index 69882e2226..db00f1fce5 100644
--- a/hhist.el
+++ b/hhist.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 1991-2023 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2025 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/hload-path.el b/hload-path.el
index d60c1238ca..e2ac08ae27 100644
--- a/hload-path.el
+++ b/hload-path.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 29-Jun-16 at 14:39:33
-;; Last-Mod: 29-Jan-25 at 19:07:46 by Mats Lidell
+;; Last-Mod: 6-Oct-25 at 00:16:34 by Mats Lidell
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -87,40 +87,6 @@ directory separator character.")
;;; Autoloads
;;; ************************************************************************
-(defmacro hyperb:with-suppressed-warnings (warnings &rest body)
- "Like `progn', but prevents compiler WARNINGS in BODY.
-
-Defined here for elpa build compatibility which uses Emacs 26 and
-does not include `with-suppressed-warnings'.
-
-WARNINGS is an associative list where the first element of each
-item is a warning type, and the rest of the elements in each item
-are symbols they apply to. For instance, if you want to suppress
-byte compilation warnings about the two obsolete functions `foo'
-and `bar', as well as the function `zot' being called with the
-wrong number of parameters, say
-
-\(with-suppressed-warnings ((obsolete foo bar)
- (callargs zot))
- (foo (bar))
- (zot 1 2))
-
-The warnings that can be suppressed are a subset of the warnings
-in `byte-compile-warning-types'; see the variable
-`byte-compile-warnings' for a fuller explanation of the warning
-types. The types that can be suppressed with this macro are
-`free-vars', `callargs', `redefine', `obsolete',
-`interactive-only', `lexical', `mapcar', `constants' and
-`suspicious'.
-
-For the `mapcar' case, only the `mapcar' function can be used in
-the symbol list. For `suspicious', only `set-buffer' can be used."
-
- (declare (debug (sexp &optional body)) (indent 1))
- (if (fboundp 'with-suppressed-warnings)
- `(with-suppressed-warnings ,warnings ,@body)
- `(with-no-warnings ,@body)))
-
;; New autoload generation function defined only as of Emacs 28
(defalias 'hload-path--make-directory-autoloads
(cond ((fboundp 'loaddefs-generate)
@@ -143,7 +109,7 @@ The function does NOT recursively descend into
subdirectories of the
directory or directories specified."
;; Don't use a 'let' on this next line or it will fail.
(setq generated-autoload-file output-file)
- (hyperb:with-suppressed-warnings ((obsolete update-directory-autoloads))
+ (with-suppressed-warnings ((obsolete update-directory-autoloads))
(update-directory-autoloads dir)))
;; Menu items could call this function before Info is loaded.
diff --git a/hsys-youtube.el b/hsys-youtube.el
index 4f7581d0bd..78562dad1b 100644
--- a/hsys-youtube.el
+++ b/hsys-youtube.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2024 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/hui-window.el b/hui-window.el
index abf08a955f..49f1b4a526 100644
--- a/hui-window.el
+++ b/hui-window.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 1992-2024 Free Software Foundation, Inc.
+;; Copyright (C) 1992-2025 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/hvar.el b/hvar.el
index 083b7ddbfc..452db87bd0 100644
--- a/hvar.el
+++ b/hvar.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 1991-2024 Free Software Foundation, Inc.
+;; Copyright (C) 1991-2025 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/hycontrol-zmfrm.el b/hycontrol-zmfrm.el
deleted file mode 100644
index dd738654a8..0000000000
--- a/hycontrol-zmfrm.el
+++ /dev/null
@@ -1,159 +0,0 @@
-;;; hycontrol-zmfrm.el --- Frame zoom support for Emacs 28 -*-
lexical-binding: t; -*-
-;;
-;; Author: Mats Lidell
-;;
-;; Orig-Date: 14-Sep-25 at 23:03:15
-;; Last-Mod: 25-Sep-25 at 20:45:39 by Mats Lidell
-;;
-;; SPDX-License-Identifier: GPL-3.0-or-later
-;;
-;; Copyright (C) 2025 Free Software Foundation, Inc.
-;; See the "HY-COPY" file for license information.
-;;
-;; This file is part of GNU Hyperbole.
-;;
-;; This files is based on zoom-frm.el and frame-cmds.el. Both under
-;; GPLv2 or later:
-;; - https://www.emacswiki.org/emacs/zoom-frm.el
-;; Copyright (C) 2005-2022, Drew Adams, all rights reserved.
-;; - https://www.emacswiki.org/emacs/frame-cmds.el
-;; Copyright (C) 1996-2023, Drew Adams, all rights reserved.
-;;
-;; It has been simplified to only support zoom in and out on all
-;; frames to support versions of Emacs where global-text-scale-adjust
-;; is not available, i.e. Emacs 28.
-
-;;; Commentary:
-;;
-;; This file can be removed when and if Hyperbole stops support for
-;; Emacs 28.
-
-;;; Code:
-
-(require 'fontset)
-
-;;; ************************************************************************
-;;; Public declarations
-;;; ************************************************************************
-
-(declare-function fontset-info "fontset.c" (fontset &optional frame))
-(declare-function query-fontset "fontset.c" (pattern &optional regexpp))
-(declare-function x-list-fonts "xfaces.c"
- (pattern &optional face frame maximum width))
-
-;;; ************************************************************************
-;;; Public variables
-;;; ************************************************************************
-
-(defcustom hycontrol-frame-zoom-font-difference 1
- "*Number of points to change the frame font size when zooming.
-This applies to commands `zoom-in/out', `zoom-in', `zoom-out',
-`hycontrol-zoom-frm-in', and `hycontrol-zoom-frm-out' when zooming a frame.
-
-The absolute value of the value must be less than the current font
-size for the frame, because the new font size cannot be less than one
-point."
- :type 'integer :group 'hyperbole-screen)
-
-(defcustom hycontrol-enlarge-font-tries 100
- "*Number of times to try to change font-size, when looking for a font.
-The font-size portion of a font name is incremented or decremented at
-most this many times, before giving up and raising an error."
- :type 'integer :group 'hyperbole-screen)
-
-;;; ************************************************************************
-;;; Public functions
-;;; ************************************************************************
-
-(defun hyconytrol-frcmds-enlarged-font-name (fontname frame increment)
- "FONTNAME, after enlarging font size of FRAME by INCREMENT.
-FONTNAME is the font of FRAME."
- (when (query-fontset fontname)
- (let ((ascii (assq 'ascii (aref (fontset-info fontname frame) 2))))
- (when ascii (setq fontname (nth 2 ascii)))))
- (let ((xlfd-fields (x-decompose-font-name fontname)))
- (unless xlfd-fields (error "Cannot decompose font name"))
- (let ((new-size (+ (string-to-number (aref xlfd-fields
xlfd-regexp-pixelsize-subnum))
- increment)))
- (unless (> new-size 0) (signal 'font-too-small (list new-size)))
- (aset xlfd-fields xlfd-regexp-pixelsize-subnum (number-to-string
new-size)))
- ;; Set point size & width to "*", so frame width will adjust to new font
size
- (aset xlfd-fields xlfd-regexp-pointsize-subnum "*")
- (aset xlfd-fields xlfd-regexp-avgwidth-subnum "*")
- (x-compose-font-name xlfd-fields)))
-
-;; This does not work 100% well. For instance, set frame font to
-;; "-raster-Terminal-normal-r-normal-normal-12-90-96-96-c-50-ms-oemlatin",
-;; then decrease font size. The next smaller existing font on my
-;; machine is
-;; "-raster-Terminal-normal-r-normal-normal-11-*-96-96-c-*-ms-oemlatin".
-;; Decrease size again. Next smaller font is
-;; "-raster-Terminal-bold-r-normal-normal-5-37-96-96-c-60-ms-oemlatin".
-;; Notice the switch to bold from regular. Cannot decrease any more.
-;; Increase size. Next larger font is
-;; "-raster-Terminal-bold-r-normal-normal-8-*-96-96-c-*-ms-oemlatin".
-;; Can no longer increase size.
-;;
-(defun hycontrol-enlarge-font (increment frame)
- "Increase size of font in FRAME by INCREMENT.
-Interactively, INCREMENT is given by the prefix argument.
-Optional FRAME parameter defaults to current frame."
- (let ((fontname (cdr (assq 'font (frame-parameters frame))))
- (count hycontrol-enlarge-font-tries))
- (setq fontname (hyconytrol-frcmds-enlarged-font-name fontname frame
increment))
- (while (and (not (x-list-fonts fontname)) (wholenump (setq count (1-
count))))
- (setq fontname (hyconytrol-frcmds-enlarged-font-name fontname frame
increment)))
- (unless (x-list-fonts fontname)
- (error "Cannot change font size"))
- (modify-frame-parameters frame (list (cons 'font fontname)))))
-
-(defun hycontrol-zoom-frm-unzoom (&optional frame)
- "Cancel zoom of FRAME."
- (interactive)
- (setq frame (or frame (selected-frame)))
- (let ((zoom-factor (frame-parameter frame 'zoomed)))
- (if (not zoom-factor)
- (error "Frame is not zoomed")
- (hycontrol-enlarge-font (- zoom-factor) frame)
- (modify-frame-parameters frame '((zoomed))))))
-
-(defun hycontrol-zoom-frm-in (frame)
- "Zoom FRAME in by `hycontrol-frame-zoom-font-difference', making text larger.
-If `hycontrol-frame-zoom-font-difference' is negative, make text smaller.
-This is equal but opposite to `hycontrol-zoom-frm-out'."
- (let ((zoom-factor (frame-parameter frame 'zoomed))
- (increment hycontrol-frame-zoom-font-difference))
- (unless zoom-factor (setq zoom-factor 0))
- (setq zoom-factor (+ zoom-factor increment))
- (hycontrol-enlarge-font increment frame)
- (modify-frame-parameters frame (list (cons 'zoomed zoom-factor)))))
-
-(defun hycontrol-zoom-frm-out (frame)
- "Zoom FRAME out by `hycontrol-frame-zoom-font-difference', making text
smaller.
-This is equal but opposite to `hycontrol-zoom-frm-in'."
- (let ((hycontrol-frame-zoom-font-difference (-
hycontrol-frame-zoom-font-difference)))
- (hycontrol-zoom-frm-in frame)))
-
-(defun hycontrol-zoom-all-frames-in ()
- "Zoom all visible frames in, making text larger.
-Zoom by `hycontrol-frame-zoom-font-difference' points.
-This is equal but opposite to `zoom-all-frames-out'."
- (interactive "P")
- (dolist (fr (visible-frame-list))
- (hycontrol-zoom-frm-in fr)))
-
-(defun hycontrol-zoom-all-frames-out ()
- "Zoom all frames out, making text smaller.
-Zoom by `hycontrol-frame-zoom-font-difference' points.
-This is equal but opposite to `hycontrol-zoom-all-frames-in'."
- (interactive "P")
- (dolist (fr (visible-frame-list))
- (hycontrol-zoom-frm-out fr)))
-
-(defun hycontrol-zoom-all-frames-unzoom ()
- "Cancel zoom on all frames."
- (dolist (fr (visible-frame-list))
- (hycontrol-zoom-frm-unzoom fr)))
-
-(provide 'hycontrol-zmfrm)
-;;; hycontrol-zmfrm.el ends here
diff --git a/hycontrol.el b/hycontrol.el
index 13fee794e2..6c61140fc0 100644
--- a/hycontrol.el
+++ b/hycontrol.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 1-Jun-16 at 15:35:36
-;; Last-Mod: 25-Sep-25 at 22:37:47 by Mats Lidell
+;; Last-Mod: 13-Oct-25 at 23:47:09 by Mats Lidell
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -125,8 +125,6 @@
(require 'framemove nil t)
(require 'windmove))
-(require 'hycontrol-zmfrm)
-
;;; ************************************************************************
;;; Public declarations
;;; ************************************************************************
@@ -142,6 +140,10 @@
(declare-function kbd-key:key-series-to-events "hib-kbd")
+(declare-function zoom-all-frames-in "ext:zoom-frm")
+(declare-function zoom-all-frames-out "ext:zoom-frm")
+(declare-function zoom-frm-unzoom "ext:zoom-frm")
+
;;; ************************************************************************
;;; Public variables
;;; ************************************************************************
@@ -843,19 +845,24 @@ the hycontrol menu."
(defun hycontrol-frame-zoom (increment)
"Change the font size of all faces by INCREMENT.
-Use `global-text-scale-adjust' if it exists. If not fall back to
-implementation in hycontrol-zmfrm.el."
+Use `global-text-scale-adjust' if it exists. If on an older Emacs that
+does not have it see if zoom-frm.el is available and use that."
(if (fboundp 'global-text-scale-adjust)
(hycontrol-global-text-scale-adjust increment)
- (if (< 0 increment)
- (hycontrol-zoom-all-frames-in)
- (hycontrol-zoom-all-frames-out))))
+ (if (not (and (fboundp 'zoom-all-frames-in) (fboundp
'zoom-all-frames-out)))
+ (hycontrol-user-error hycontrol-debug "(HyControl): Zooming requires
separate \"zoom-frm.el\" Emacs Lisp library installation")
+ (if (< 0 increment)
+ (zoom-all-frames-in)
+ (zoom-all-frames-out)))))
(defun hycontrol-frame-zoom-reset ()
"Reset zoom level back to default."
(if (fboundp 'global-text-scale-adjust)
(hycontrol-global-text-scale-adjust 0)
- (hycontrol-zoom-all-frames-unzoom)))
+ (if (not (fboundp 'zoom-frm-unzoom))
+ (hycontrol-user-error hycontrol-debug "(HyControl): Zooming requires
separate \"zoom-frm.el\" Emacs Lisp library installation")
+ (dolist (fr (visible-frame-list))
+ (zoom-frm-unzoom fr)))))
(defun hycontrol-make-frame ()
"Create a new frame with the same size and selected buffer as the selected
frame.
diff --git a/hyrolo-logic.el b/hyrolo-logic.el
index 78b7447f70..ecc812a38e 100644
--- a/hyrolo-logic.el
+++ b/hyrolo-logic.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 1989-2024 Free Software Foundation, Inc.
+;; Copyright (C) 1989-2025 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/hyrolo-menu.el b/hyrolo-menu.el
index 084d08347a..10cb72b284 100644
--- a/hyrolo-menu.el
+++ b/hyrolo-menu.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 1994-2024 Free Software Foundation, Inc.
+;; Copyright (C) 1994-2025 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/hywiki.el b/hywiki.el
index d564c5f342..ca60c71916 100644
--- a/hywiki.el
+++ b/hywiki.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 21-Apr-24 at 22:41:13
-;; Last-Mod: 12-Oct-25 at 13:28:42 by Bob Weiner
+;; Last-Mod: 18-Oct-25 at 11:56:19 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -1233,7 +1233,7 @@ calling this function."
(user-error "(hywiki-add-org-id): Referent buffer <%s> must be in
org-mode, not %s"
(buffer-name)
major-mode))
- (let ((org-id (hyperb:with-suppressed-warnings ((callargs org-id-get))
+ (let ((org-id (with-suppressed-warnings ((callargs org-id-get))
(if (>= (action:param-count #'org-id-get) 4)
(org-id-get nil nil nil t)
(org-id-get)))))
diff --git a/kotl/klink.el b/kotl/klink.el
index 3a57c34792..4826701a46 100644
--- a/kotl/klink.el
+++ b/kotl/klink.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 1993-2024 Free Software Foundation, Inc.
+;; Copyright (C) 1993-2025 Free Software Foundation, Inc.
;; See the "../HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/kotl/kotl-mode.el b/kotl/kotl-mode.el
index d938dc22be..d8501f4bd8 100644
--- a/kotl/kotl-mode.el
+++ b/kotl/kotl-mode.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 6/30/93
-;; Last-Mod: 20-Jun-25 at 20:08:20 by Bob Weiner
+;; Last-Mod: 6-Oct-25 at 00:16:41 by Mats Lidell
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -240,7 +240,7 @@ It provides the following keys:
;; We have been converting a buffer from a foreign format to a koutline.
;; Now that it is converted, ensure that `kotl-previous-mode' is set to
;; koutline.
- (hyperb:with-suppressed-warnings ((free-vars kotl-previous-mode))
+ (with-suppressed-warnings ((free-vars kotl-previous-mode))
(setq kotl-previous-mode 'kotl-mode))
(run-mode-hooks 'kotl-mode-hook)
(unless (string-prefix-p hyrolo-display-buffer (buffer-name))
diff --git a/smart-clib-sym b/smart-clib-sym
index fab7de414c..6a344f997c 100644
--- a/smart-clib-sym
+++ b/smart-clib-sym
@@ -8,7 +8,7 @@
# Orig-Date: 5-Oct-91 at 03:29:05
# Last-Mod: 24-Jan-22 at 00:52:07 by Bob Weiner
#
-# Copyright (C) 1991-2016 Free Software Foundation, Inc.
+# Copyright (C) 1991-2022 Free Software Foundation, Inc.
# See the "HY-COPY" file for license information.
#
# This file is part of GNU Hyperbole.
diff --git a/test/hib-social-tests.el b/test/hib-social-tests.el
index 6a4d089829..22476168c2 100644
--- a/test/hib-social-tests.el
+++ b/test/hib-social-tests.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 2021 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2024 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/test/hmouse-info-tests.el b/test/hmouse-info-tests.el
index 1e650a68c4..94dac9e453 100644
--- a/test/hmouse-info-tests.el
+++ b/test/hmouse-info-tests.el
@@ -3,7 +3,7 @@
;; Author: Mats Lidell <[email protected]>
;;
;; Orig-Date: 29-Dec-21 at 09:02:00
-;; Last-Mod: 6-Jul-25 at 13:02:40 by Bob Weiner
+;; Last-Mod: 5-Oct-25 at 23:02:48 by Mats Lidell
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -21,6 +21,9 @@
(require 'ert)
(require 'ert-x)
(require 'hmouse-info)
+(require 'hy-test-helpers)
+
+(defvar Info-complete-menu-buffer)
(ert-deftest hmouse-info-read-index-with-completion ()
"Read a completion that completes."
@@ -33,8 +36,8 @@
(progn
(info "(emacs)")
(setq Info-complete-menu-buffer (clone-buffer))
- (should (eq '() (Info-build-menu-item-completions "nothinglikethis"
nil t)))
- (kill-buffer "*info*"))))
+ (should (eq '() (Info-build-menu-item-completions "nothinglikethis"
nil t))))
+ (kill-buffer "*info*")))
(ert-deftest hmouse-info-build-completions-multiple-matches ()
"Build completions."
diff --git a/test/hsettings-tests.el b/test/hsettings-tests.el
index 0963993f2b..b5c70b9838 100644
--- a/test/hsettings-tests.el
+++ b/test/hsettings-tests.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 2024 Free Software Foundation, Inc.
+;; Copyright (C) 2024-2025 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/test/hui-register-tests.el b/test/hui-register-tests.el
index 3ae8a4fc74..5757ada985 100644
--- a/test/hui-register-tests.el
+++ b/test/hui-register-tests.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 2021-2024 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2025 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/test/hy-test-helpers.el b/test/hy-test-helpers.el
index 625f0e27f7..5e4d534d7a 100644
--- a/test/hy-test-helpers.el
+++ b/test/hy-test-helpers.el
@@ -3,7 +3,7 @@
;; Author: Mats Lidell <[email protected]>
;;
;; Orig-Date: 30-Jan-21 at 12:00:00
-;; Last-Mod: 20-Sep-25 at 11:26:21 by Mats Lidell
+;; Last-Mod: 18-Oct-25 at 00:31:06 by Mats Lidell
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -41,10 +41,11 @@ Disable `vertico-mode' which can get in the way of standard
key
processing."
(declare (debug t) (indent 1))
`(if (bound-and-true-p vertico-mode)
- (unwind-protect
- (progn (vertico-mode 0)
- (ert-simulate-keys ,keys ,@body))
- (vertico-mode 1))
+ (with-no-warnings
+ (unwind-protect
+ (progn (vertico-mode 0)
+ (ert-simulate-keys ,keys ,@body))
+ (vertico-mode 1)))
(ert-simulate-keys ,keys ,@body)))
(defun hy-test-helpers:should-last-message (msg captured)
@@ -109,16 +110,9 @@ Checks ACTYPE, ARGS, LOC, LBL-KEY and NAME."
(defun hy-delete-dir-and-buffer (dir)
"Delete DIR and buffer visiting directory."
- (let ((buf (find-buffer-visiting dir))
- (hywiki-cache (when (featurep 'hywiki)
- (expand-file-name hywiki-cache-default-file
- dir))))
+ (let ((buf (find-buffer-visiting dir)))
(when buf
(kill-buffer buf))
- (when (and hywiki-cache
- (file-readable-p hywiki-cache)
- (file-writable-p hywiki-cache))
- (delete-file hywiki-cache))
(delete-directory dir)))
(defun hy-make-random-wikiword (&optional length word-length)
diff --git a/test/hyperbole-tests.el b/test/hyperbole-tests.el
index 6189a4e2c9..bf8a3005e2 100644
--- a/test/hyperbole-tests.el
+++ b/test/hyperbole-tests.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 2022 Free Software Foundation, Inc.
+;; Copyright (C) 2022-2023 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/test/hywiki-tests.el b/test/hywiki-tests.el
index c4eab19ef4..888480f897 100644
--- a/test/hywiki-tests.el
+++ b/test/hywiki-tests.el
@@ -3,7 +3,7 @@
;; Author: Mats Lidell
;;
;; Orig-Date: 18-May-24 at 23:59:48
-;; Last-Mod: 5-Oct-25 at 14:03:21 by Bob Weiner
+;; Last-Mod: 18-Oct-25 at 10:15:13 by Mats Lidell
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -73,75 +73,79 @@ Last two elements are optional.")
start
end
hywiki-ref-positions)
- (with-temp-buffer
- (hywiki-tests--preserve-hywiki-mode
- (org-mode)
- (hywiki-mode 1)
- (mapc
- (lambda (before-after)
- (condition-case err
- (progn
- (setq before (nth 0 before-after)
- after (nth 1 before-after)
- name (nth 2 before-after)
- doc (nth 3 before-after))
- ;; Ensure all brace delimited HyWikiWords have their pages
- ;; created so their references will be highlighted.
- (mapc #'hywiki-add-page
- (delq nil
- (mapcar #'hywiki-get-singular-wikiword
- (seq-remove #'string-empty-p
- (mapcar #'string-trim
-
(hywiki-tests--get-brace-strings after))))))
- (unwind-protect
- (progn
- (pop-to-buffer (current-buffer))
- (erase-buffer)
- (hywiki-tests--insert-by-char before)
- (hywiki-tests--interpolate-buffer)
- ;; Markup before string in temp buffer
- ;; Surround any HyWikiWord refs with braces to match
after string.
- (setq hywiki-ref-positions
- (if (version< emacs-version "29")
- (hywiki-get-reference-positions)
- ;; Button/overlay ordering is reversed after
Emacs 28
- (nreverse (hywiki-get-reference-positions))))
- (dolist (start-end hywiki-ref-positions)
- (setq start (car start-end)
- end (cdr start-end))
- (goto-char end)
- (insert "}")
- (goto-char start)
- (insert "{"))
- ;; Store the buffer string for comparison
- (setq markedup-before (buffer-string))
- ;; Markup after string
- (erase-buffer)
- (insert after)
- (hywiki-tests--interpolate-buffer)
- (setq markedup-after (buffer-string))
- ;; Compare markedup-before to markedup-after
- (if (or name doc)
- (should (equal (list :test-num test-num
- :markedup (format "%S"
markedup-before)
- :test-name name :doc doc
- :before before :after after)
- (list :test-num test-num
- :markedup (format "%S"
markedup-after)
- :test-name name :doc doc
- :before before :after after)))
- (should (equal (list :test-num test-num
- :markedup (format "%S"
markedup-before)
- :before before :after after)
- (list :test-num test-num
- :markedup (format "%S"
markedup-after)
- :before before :after after))))
- (cl-incf test-num))
- (goto-char (point-min))))
- (error (error "%s ---- %S" err (list :markedup markedup-before
- :test-num test-num
- :before before :after after)))))
- hywiki-tests--edit-string-pairs)))))
+ (unwind-protect
+ (with-temp-buffer
+ (hywiki-tests--preserve-hywiki-mode
+ (org-mode)
+ (hywiki-mode 1)
+ (mapc
+ (lambda (before-after)
+ (condition-case err
+ (progn
+ (setq before (nth 0 before-after)
+ after (nth 1 before-after)
+ name (nth 2 before-after)
+ doc (nth 3 before-after))
+ ;; Ensure all brace delimited HyWikiWords have their pages
+ ;; created so their references will be highlighted.
+ (mapc #'hywiki-add-page
+ (delq nil
+ (mapcar #'hywiki-get-singular-wikiword
+ (seq-remove #'string-empty-p
+ (mapcar #'string-trim
+
(hywiki-tests--get-brace-strings after))))))
+ (unwind-protect
+ (progn
+ (pop-to-buffer (current-buffer))
+ (erase-buffer)
+ (hywiki-tests--insert-by-char before)
+ (hywiki-tests--interpolate-buffer)
+ ;; Markup before string in temp buffer
+ ;; Surround any HyWikiWord refs with braces to match
after string.
+ (setq hywiki-ref-positions
+ (if (version< emacs-version "29")
+ (hywiki-get-reference-positions)
+ ;; Button/overlay ordering is reversed after
Emacs 28
+ (nreverse (hywiki-get-reference-positions))))
+ (dolist (start-end hywiki-ref-positions)
+ (setq start (car start-end)
+ end (cdr start-end))
+ (goto-char end)
+ (insert "}")
+ (goto-char start)
+ (insert "{"))
+ ;; Store the buffer string for comparison
+ (setq markedup-before (buffer-string))
+ ;; Markup after string
+ (erase-buffer)
+ (insert after)
+ (hywiki-tests--interpolate-buffer)
+ (setq markedup-after (buffer-string))
+ ;; Compare markedup-before to markedup-after
+ (if (or name doc)
+ (should (equal (list :test-num test-num
+ :markedup (format "%S"
markedup-before)
+ :test-name name :doc doc
+ :before before :after after)
+ (list :test-num test-num
+ :markedup (format "%S"
markedup-after)
+ :test-name name :doc doc
+ :before before :after
after)))
+ (should (equal (list :test-num test-num
+ :markedup (format "%S"
markedup-before)
+ :before before :after after)
+ (list :test-num test-num
+ :markedup (format "%S"
markedup-after)
+ :before before :after
after))))
+ (cl-incf test-num))
+ (goto-char (point-min))))
+ (error (error "%s ---- %S" err (list :markedup markedup-before
+ :test-num test-num
+ :before before :after
after)))))
+ hywiki-tests--edit-string-pairs)))
+ (dolist (f '("AI.org" "Hi.org" "HiHo.org" "HyWikiWord.org"
"MyWikiWord.org" "Non.org" "WikiWord.org"))
+ (hy-delete-file-and-buffer (expand-file-name f hywiki-directory)))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(defun hywiki-tests--get-brace-strings (s)
"Return the substrings in S delimited by curly braces {…}, excluding braces.
@@ -163,6 +167,28 @@ Assume no nesting of braces, nor any quoting of braces."
str)
(hywiki-tests--execute-commands))
+(defun hywiki-tests--only-file-in-dir-p (file)
+ "Check if FILE is single in its directory."
+ (let* ((dir (file-name-directory file))
+ (files (seq-remove (lambda (f) (member f '("." "..")))
+ (directory-files dir))))
+ (and (= (length files) 1)
+ (string= (car files) (file-name-nondirectory file)))))
+
+(defun hywiki-tests--delete-hywiki-cache (dir)
+ "Delete the hywiki cache if it is the only file in DIR."
+ (let ((hywiki-cache (expand-file-name hywiki-cache-default-file dir)))
+ (when (and hywiki-cache
+ (file-readable-p hywiki-cache)
+ (file-writable-p hywiki-cache)
+ (hywiki-tests--only-file-in-dir-p hywiki-cache))
+ (delete-file hywiki-cache))))
+
+(defun hywiki-tests--delete-hywiki-dir-and-buffer (dir)
+ "Remove DIR and optional `hywiki-cache' file."
+ (hywiki-tests--delete-hywiki-cache dir)
+ (hy-delete-dir-and-buffer dir))
+
(defun hywiki-tests--execute-commands ()
"Process all events from `unread-command-events'."
(interactive)
@@ -255,7 +281,7 @@ This is for simulating the command loop."
(should (string= (file-name-nondirectory hywiki-page-file)
(cdr (hywiki-get-referent "WikiWord"))))))
(hy-delete-file-and-buffer hywiki-page-file)
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--hywiki-create-page--adds-no-wiki-word-fails ()
"Verify add page requires a WikiWord."
@@ -266,7 +292,7 @@ This is for simulating the command loop."
(let ((hywiki-directory (make-temp-file "hywiki" t)))
(unwind-protect
(should-not (hywiki-add-page "notawikiword"))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--action-key-on-hywikiword-displays-page ()
"Verify `action-key' on a prefixed WikiWord, outside of hywiki-directory,
creates a new page."
@@ -282,7 +308,7 @@ This is for simulating the command loop."
(action-key)
(should (equal (cons 'page wikifile) (hywiki-get-referent
"WikiWord"))))
(hy-delete-file-and-buffer (expand-file-name wikifile
hywiki-directory))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--assist-key-on-hywikiword-displays-help ()
"Verify `assist-key' on a prefixed WikiWord, outside of hywiki-directory,
displays help for the WikiWord link."
@@ -299,7 +325,7 @@ This is for simulating the command loop."
(assist-key)
(other-window 1)
(should (string-prefix-p "*Help: Hyperbole " (buffer-name))))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--action-key-on-wikiword-displays-page ()
"Verify `action-key' on a WikiWord, outside of hywiki-directory, creates a
new page."
@@ -325,7 +351,7 @@ This is for simulating the command loop."
(insert "WikiWord page")
(goto-char (point-min)))))
(hy-delete-file-and-buffer hywiki-page-file)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--action-key-on-wikiword-and-section-displays-page ()
"Verify `action-key' on a WikiWord with section moves to the section."
@@ -349,7 +375,7 @@ This is for simulating the command loop."
(should (string= hywiki-page-file (buffer-file-name)))
(should (looking-at-p (regexp-quote v))))))
(hy-delete-file-and-buffer hywiki-page-file)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest
hywiki-tests--action-key-on-wikiword-and-line-column-displays-page ()
"Verify `action-key' on a WikiWord with line and column specifications goes
to expected point."
@@ -377,7 +403,7 @@ line 2
(should (looking-at-p (format "%s$" l)))
(should (looking-at-p (format "line %s$" l))))))))
(hy-delete-file-and-buffer hywiki-page-file)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--not-a-wikiword-unless-in-hywiki-mode ()
"Verify WikiWord is not a WikiWord unless in `hywiki-mode'."
@@ -392,7 +418,7 @@ line 2
(should-not (hywiki-word-at))
(hywiki-mode 1)
(should (string= "WikiWord" (hywiki-word-at))))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--a-wikiword-in-hywiki-directory ()
"Verify WikiWord is identified if in `hywiki-directory'."
@@ -409,7 +435,7 @@ line 2
(goto-char 4)
(should (hywiki-word-at)))
(hy-delete-file-and-buffer wiki-page)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--wikiword-identified-with-delimiters ()
"Verify WikiWord is identified when surrounded by delimiters."
@@ -473,7 +499,7 @@ line 2
(should-not v)
(should t)))))
(hywiki-mode 0)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--at-wikiword-finds-word-and-section ()
"Verify `hywiki-word-at' finds WikiWord and section if available."
@@ -495,7 +521,7 @@ line 2
(insert in)
(goto-char 4)
(should (string= expect (hywiki-word-at))))))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--sections-with-dash-space ()
"Verify `hywiki-word-at' finds sections with dash and space."
@@ -520,7 +546,7 @@ line 2
(insert "WikiWord#\"section-within-quotes\"")
(goto-char 4)
(should-not (hywiki-word-at))))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--sections-with-space-and-delimited-string ()
"Verify `hywiki-word-at' with space and delimited string.
@@ -545,7 +571,7 @@ HyWikiWord reference."
(insert "\"WikiWord#section rest WikiPage\"")
(goto-char 4)
(should (string= "WikiWord#section rest WikiPage"
(hywiki-word-at)))))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--word-is-p ()
"Verify `hywiki-word-is-p' identifies WikiWords."
@@ -580,7 +606,7 @@ HyWikiWord reference."
(with-current-buffer (find-file-noselect wiki-page)
(should (hywiki-in-page-p))))
(hy-delete-files-and-buffers (list no-wiki-page wiki-page))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--active-in-current-buffer-p ()
"Verify `hywiki-active-in-current-buffer-p'."
@@ -600,7 +626,7 @@ HyWikiWord reference."
(dired-mode)
(should-not (hywiki-active-in-current-buffer-p)))
(hy-delete-file-and-buffer wiki-page)
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--directory-get-mod-time ()
"Verify `hywiki-directory-get-mod-time'."
@@ -651,7 +677,7 @@ Both mod-time and checksum must be changed for a test to
return true."
(should (equal wiki-page (cdr (hywiki-add-page "WikiWord"))))
(should (equal '("WikiWord") (hywiki-get-wikiword-list))))
(hy-delete-file-and-buffer wiki-page)
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--get-page-list-after-add-and-delete ()
"Verify `hywiki-get-wikiword-list' is updated when a page is added and
removed."
@@ -667,7 +693,7 @@ Both mod-time and checksum must be changed for a test to
return true."
(hy-delete-file-and-buffer wiki-page2))
(should (set:equal '("WordOne") (hywiki-get-wikiword-list))))
(hy-delete-file-and-buffer wiki-page)
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--get-page-list-multiple-words ()
"Verify `hywiki-get-wikiword-list' returns multiple WikiWords."
@@ -683,7 +709,7 @@ Both mod-time and checksum must be changed for a test to
return true."
(should (= 10 (length (hywiki-get-wikiword-list))))
(should (= 10 (length (seq-uniq (hywiki-get-wikiword-list))))))
(hy-delete-files-and-buffers wiki-page-list)
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--get-page-list-when-new-wiki-directory ()
"Verify `hywiki-get-wikiword-list' is empty for new `hywiki-directory'."
@@ -696,9 +722,9 @@ Both mod-time and checksum must be changed for a test to
return true."
(unwind-protect
(progn
(should (= 0 (length (hywiki-get-wikiword-list)))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(hy-delete-file-and-buffer wikipage)
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest
hywiki-tests--get-page-list-for-new-wiki-directory-after-added-referent ()
"Verify `hywiki-get-wikiword-list' is empty for new `hywiki-directory'."
@@ -714,8 +740,8 @@ Both mod-time and checksum must be changed for a test to
return true."
(let ((hywiki-directory (make-temp-file "hywiki" t)))
(unwind-protect
(should (zerop (length (hywiki-get-wikiword-list))))
- (hy-delete-dir-and-buffer hywiki-directory))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
;; Following test cases for verifying proper face is some what
;; experimental. They need to be run in interactive mode.
@@ -741,7 +767,7 @@ Both mod-time and checksum must be changed for a test to
return true."
(goto-char 4)
(should (hywiki-word-face-at-p))))
(hy-delete-file-and-buffer wikipage)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--no-face-property-for-no-wikipage ()
"Verify WikiWord for no wiki page does not get face property
hywiki-word-face."
@@ -757,7 +783,7 @@ Both mod-time and checksum must be changed for a test to
return true."
(hywiki-tests--command-execute #'self-insert-command 1 ?d)
(goto-char 4)
(should-not (hywiki-word-face-at-p))))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--verify-face-property-when-editing-wikiword ()
"Verify face property changes when WikiWord is edited."
@@ -782,7 +808,7 @@ Both mod-time and checksum must be changed for a test to
return true."
(should (looking-at-p "ord "))
(should-not (hywiki-word-face-at-p)))
(hy-delete-files-and-buffers (list wikipage))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest
hywiki-tests--verify-face-property-when-editing-wikiword-first-char ()
"Verify face property changes when WikiWord is edited in the first char
position."
@@ -809,7 +835,7 @@ Both mod-time and checksum must be changed for a test to
return true."
(should (looking-at-p "WikiWord"))
(should (hywiki-word-face-at-p))))
(hy-delete-files-and-buffers (list wikipage))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--references-to-org-link ()
"Verify `hywiki-references-to-org-links' converts WikiWords to org links."
@@ -836,7 +862,7 @@ Both mod-time and checksum must be changed for a test to
return true."
(should (string= "[[hy:WikiWord]]"
(buffer-substring-no-properties (point-min)
(point-max))))))
(hy-delete-file-and-buffer wikipage)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--at-tags-p ()
"Verify `hywiki-at-tags-p'."
@@ -888,7 +914,7 @@ Both mod-time and checksum must be changed for a test to
return true."
(should (when wikipage (string= (concat wikipage "::section")
(hywiki-reference-to-referent
"WikiWord#section")))))
(hy-delete-file-and-buffer wikipage)
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--org-link-export ()
"Verify `hywiki-org-link-export' output for different formats."
@@ -919,7 +945,7 @@ Both mod-time and checksum must be changed for a test to
return true."
(hywiki-org-link-export "WikiWord" "doc" 'unknown)))
(should (string= "NotAWikiPage" (hywiki-org-link-export
"NotAWikiPage" "doc" 'ascii))))
(hy-delete-file-and-buffer wikipage)
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--action-key-moves-to-word-and-section ()
"Verify action key on a WikiWord with section, line and column works."
@@ -969,7 +995,7 @@ body B
(error (error "'%s', '%s' - Error: %s"
wiki-link expected-str-at-pos err-msg))))))
(hy-delete-file-and-buffer wikipage)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--published-html-links-to-word-and-section ()
"Verify published html links to WikiWord and section."
@@ -1037,7 +1063,7 @@ WikiWord#Csection-subsection
(expand-file-name "index.org"
hywiki-directory)
(expand-file-name "index.html"
hywiki-org-publishing-directory)))
(hy-delete-dir-and-buffer hywiki-org-publishing-directory)
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--get-singular-wikiword ()
"Verify plural WikiWord is converted to singular.
@@ -1069,7 +1095,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(should-not (hywiki-add-referent "notawikiword" referent))
(should (hywiki-add-referent "WikiWord" referent))
(should (equal referent (hywiki-get-referent "WikiWord"))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-activity ()
"Verify `hywiki-add-activity'."
@@ -1081,7 +1107,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(hywiki-add-activity wikiword)
(should (equal '(activity . "activity")
(hywiki-get-referent wikiword))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-bookmark ()
"Verify `hywiki-add-bookmark'."
@@ -1099,7 +1125,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(should (equal '(bookmark . "WikiWord")
(hywiki-get-referent "WikiWord")))))
(hy-delete-file-and-buffer file)
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-command ()
"Verify `hywiki-add-command'."
@@ -1110,7 +1136,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(hywiki-add-command wikiword)
(should (equal '(command . hpath:find)
(hywiki-get-referent wikiword))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-find ()
"Verify `hywiki-add-find'."
@@ -1121,7 +1147,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(progn
(hywiki-add-find wikiword)
(should (equal referent (hywiki-get-referent wikiword))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-global-button ()
"Verify `hywiki-add-global-button'."
@@ -1129,7 +1155,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(unwind-protect
(mocklet ((hargs:read-match => "gbtn"))
(should (equal '(global-button . "gbtn") (hywiki-add-global-button
"WikiWord"))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-hyrolo ()
"Verify `hywiki-add-hyrolo'."
@@ -1138,7 +1164,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(progn
(hywiki-add-hyrolo "WikiWord")
(should (equal '(hyrolo . hyrolo-fgrep) (hywiki-get-referent
"WikiWord"))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-info-index ()
"Verify `hywiki-add-info-index'."
@@ -1148,7 +1174,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(info "emacs")
(hywiki-add-info-index "WikiWord")
(should (equal '(info-index . "(emacs)files") (hywiki-get-referent
"WikiWord"))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-info-node ()
"Verify `hywiki-add-info-node'."
@@ -1157,7 +1183,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(hy-test-helpers:ert-simulate-keys "(emacs)\r"
(hywiki-add-info-node "WikiWord")
(should (equal '(info-node . "(emacs)") (hywiki-get-referent
"WikiWord"))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-key-series ()
"Verify `hywiki-add-key-series'."
@@ -1170,7 +1196,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(hy-test-helpers:ert-simulate-keys "{ABC}\r"
(hywiki-add-key-series "WikiWord")
(should (equal '(key-series . "{ABC}") (hywiki-get-referent
"WikiWord")))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-path-link ()
"Verify `hywiki-add-path-link'."
@@ -1180,7 +1206,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(progn (hywiki-add-path-link wikiword "file" 20)
(should (equal '(path-link . "file:L1")
(hywiki-get-referent wikiword))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-org-id ()
"Verify `hywiki-add-org-id'."
@@ -1214,7 +1240,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(should (string-prefix-p "ID: " referent-value))
(error "(hywiki-tests--add-org-id): referent value is a
non-string: %s" referent-value)))))
(hy-delete-file-and-buffer filea))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--add-org-roam-node ()
"Verify `hywiki-add-org-roam-node'."
@@ -1228,7 +1254,7 @@ Note special meaning of `hywiki-allow-plurals-flag'."
(hywiki-add-org-roam-node wikiword)
(should (equal '(org-roam-node . "node-title")
(hywiki-get-referent wikiword))))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(defmacro hywiki-tests--referent-test (expected-referent &rest prepare)
"Template macro for generated a non-page HyWikiWord referent.
@@ -1259,7 +1285,7 @@ named WikiReferent with a non-page referent type."
(should (equal ,expected-referent (hywiki-get-referent
wiki-word-non-page))))
(hy-delete-files-and-buffers (list (hywiki-cache-default-file)))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
(ert-deftest hywiki-tests--save-referent-keyseries ()
"Verify saving and loading a referent keyseries works ."
@@ -1292,7 +1318,7 @@ named WikiReferent with a non-page referent type."
(point-min)
(point-max)))))
(hy-delete-files-and-buffers (list wiki-page
(hywiki-cache-default-file)))
- (hy-delete-dir-and-buffer hywiki-directory))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
;; Bookmark
(ert-deftest hywiki-tests--save-referent-bookmark ()
@@ -1519,7 +1545,7 @@ See gh#rswgnu/hyperbole/669."
(goto-char 4)
(should (hywiki-word-face-at-p))))
(hy-delete-file-and-buffer wiki-page)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(defun hywiki-tests--hywiki-face-region-at (&optional pos)
"Get the start and end of the hywiki--word-face overlay at POS or point.
@@ -1643,7 +1669,7 @@ resulting state at point is a WikiWord or not."
(dolist (testcase hywiki-tests--wikiword-step-check)
(with-temp-buffer
(hywiki-tests--run-test-case testcase))))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--wikiword-step-check-verification-with-faces ()
"Run the step check to verify WikiWord is identified under change.
@@ -1664,7 +1690,7 @@ is a WikiWord at point or not."
(with-temp-buffer
(hywiki-tests--run-test-case testcase))))
(hy-delete-files-and-buffers wiki-page-list)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(defconst hywiki-tests--lorem-ipsum "\
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
@@ -1702,7 +1728,7 @@ Insert test in the middle of other text."
'((p3 . t)
(" " . "Hi")
(p1 . t) (p4) (-1 . "Hiho")))))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--wikiword-identified-in-emacs-lisp-mode ()
"Verify WikiWord is identified when surrounded by delimiters in
`emacs-lisp-mode'."
@@ -1747,7 +1773,7 @@ Insert test in the middle of other text."
(hywiki-tests--command-execute #'newline 1 'interactive)
(goto-char 16)
(should-not (hywiki-word-at)))))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--wikiword-identified-in-strings-in-emacs-lisp-mode ()
"Verify WikiWord is identified when in strings in `emacs-lisp-mode'."
@@ -1788,7 +1814,7 @@ Insert test in the middle of other text."
(should (looking-at-p "DEMO\\.org\""))
(should (ibtype:test-p 'hywiki-existing-word)))
(hy-delete-file-and-buffer wiki-page)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest
hywiki-tests--nonexistent-wikiword-with-section-should-create-wikiword ()
"Verify action-key on a new WikiWord#section creates proper page filename."
@@ -1805,7 +1831,7 @@ Insert test in the middle of other text."
(should-not (file-exists-p hywiki-page-with-section))
(should (file-exists-p hywiki-page)))
(hy-delete-files-and-buffers (list hywiki-page
hywiki-page-with-section))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--verify-removal-of-delimiter-updates-face ()
"Verify removing a delimiter the face is changed along with the WikiWord."
@@ -1823,7 +1849,7 @@ Insert test in the middle of other text."
(with-temp-buffer
(hywiki-tests--run-test-case testcase))))
(hy-delete-file-and-buffer wikiHi)
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--wikiword-yanked-with-extra-words ()
"Verify that a yanked in WikiWord highlights properly."
@@ -1877,7 +1903,7 @@ Insert test in the middle of other text."
(goto-char 11)
(hywiki-tests--verify-hywiki-word "Ho#d")))
(hy-delete-files-and-buffers (list wikiHi wikiHo))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
(ert-deftest hywiki-tests--create-wikiword-file-highlights-wikiword ()
"Verify creating a WikiWord-file highlights the WikiWord in another file."
@@ -1896,7 +1922,112 @@ Insert test in the middle of other text."
(goto-char 2)
(hywiki-tests--verify-hywiki-word "Ho")))
(hy-delete-files-and-buffers (list wikiHi wikiHo))
- (hy-delete-dir-and-buffer hywiki-directory)))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
+
+(ert-deftest hywiki-tests--consult-grep ()
+ "Verify `hywiki-consult-grep' calls `hsys-consult-grep'."
+ (let ((hywiki-directory (make-temp-file "hywiki" t))
+ (hsys-consult-flag nil))
+ (unwind-protect
+ (progn
+ ;; No path list
+ (mocklet (((hsys-consult-grep "--include *.org" "--glob *.org"
"regexp" 0 (list hywiki-directory) "prompt") => "match"))
+ (should (string= (hywiki-consult-grep "regexp" 0 nil "prompt")
"match")))
+ ;; Path list
+ (mocklet (((hsys-consult-grep "--include *.org" "--glob *.org"
"regexp" 0 '("path") "prompt") => "match"))
+ (should (string= (hywiki-consult-grep "regexp" 0 '("path")
"prompt") "match")))
+ ;; No Prompt, max-matches = 0
+ (mocklet (((hsys-consult-grep "--include *.org" "--glob *.org"
"regexp" 0 '("path") "Grep HyWiki dir headlines") => "match"))
+ (should (string= (hywiki-consult-grep "regexp" 0 '("path"))
"match")))
+ ;; No Prompt, max-matches != 0
+ (mocklet (((hsys-consult-grep "--include *.org" "--glob *.org"
"regexp" 1 '("path") "Grep HyWiki dir") => "match"))
+ (should (string= (hywiki-consult-grep "regexp" 1 '("path"))
"match"))))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory))))
+
+(ert-deftest hywiki-tests--hkey-help ()
+ "Verify `hkey-help'."
+ (mocklet (((hkey-actions) => t)
+ ((hkey-help) => "hkey-help"))
+ (should (string= (hywiki-help) "hkey-help")))
+ (let ((help-bn "*Help: HyWikiWords*"))
+ (unwind-protect
+ (progn
+ (when (get-buffer help-bn)
+ (kill-buffer help-bn))
+ (mocklet (((hkey-actions) => nil)
+ (hkey-help not-called)
+ ((documentation 'ibtypes::hywiki-existing-word) => "Doc
string"))
+ (hywiki-help)
+ (should (get-buffer help-bn))
+ (with-current-buffer help-bn
+ (should (string= (buffer-string) "Doc string\n")))))
+ (kill-buffer help-bn))))
+
+(ert-deftest hywiki-tests--add-path-link-v2 ()
+ "Verify path links."
+ (hywiki-tests--preserve-hywiki-mode
+ (let* ((hywiki-directory (make-temp-file "hywiki" t))
+ (wikiHi (cdr (hywiki-add-page "Hi")))
+ (wikiHo (cdr (hywiki-add-page "Ho"))))
+ (unwind-protect
+ (progn
+ (hywiki-mode 1)
+ (with-current-buffer (find-file wikiHo)
+ (insert "123"))
+ (with-current-buffer (find-file wikiHi)
+ (hywiki-add-path-link "HoRef" wikiHo 3)
+ (should (string= (concat (file-name-nondirectory wikiHo)
":L1:C2")
+ (cdr (hywiki-get-referent "HoRef"))))))
+ (hy-delete-files-and-buffers (list wikiHi wikiHo))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
+
+(ert-deftest hywiki-tests--interactive-hywiki-mode-toggles ()
+ "Verify `hywiki-mode' called interactively toggles mode."
+ (hywiki-tests--preserve-hywiki-mode
+ (with-temp-buffer
+ (hywiki-mode 1)
+ (should hywiki-mode)
+ ;; Toggle
+ (call-interactively #'hywiki-mode)
+ (should-not hywiki-mode)
+ (call-interactively #'hywiki-mode)
+ (should hywiki-mode))))
+
+(ert-deftest hywiki-tests--directory-dired-edit ()
+ "Verify Dired is activated."
+ (hywiki-tests--preserve-hywiki-mode
+ (let* ((hywiki-directory (make-temp-file "hywiki" t))
+ (wikiHi (cdr (hywiki-add-page "Hi")))
+ (action-key-modeline-buffer-id-function nil)) ; Avoid treemacs.
+ (unwind-protect
+ (progn
+ (hywiki-directory-edit)
+ (should (equal 'dired-mode major-mode))
+ (should (string= default-directory (file-name-as-directory
hywiki-directory))))
+ (hy-delete-files-and-buffers (list wikiHi))
+ (hywiki-tests--delete-hywiki-dir-and-buffer hywiki-directory)))))
+
+(ert-deftest hywiki-tests--tags-view ()
+ "Verify `hywiki-tag-view' calls `org-tags-view' and sets up `org-redo-cmd'."
+ (with-temp-buffer
+ (insert "1\n2\n3\n4\n5\n")
+ (goto-char 1)
+ (let ((bn (buffer-name)))
+ (mocklet (((org-tags-view nil "match") => t))
+ (hywiki-tags-view nil "match" bn)
+ (should (equal (get-text-property 1 'org-redo-cmd)
+ (list #'hywiki-tags-view nil nil bn)))
+ (should (= (line-number-at-pos) 3)))))
+ ;; todo-only
+ (with-temp-buffer
+ (insert "1\n2\n3\n4\n5\n")
+ (goto-char 1)
+ (let ((bn (buffer-name)))
+ (mocklet (((org-tags-view t "match") => t))
+ (hywiki-tags-view t "match" bn)
+ (should (equal (get-text-property 1 'org-redo-cmd)
+ (list #'hywiki-tags-view t nil bn)))
+ (should (= (line-number-at-pos) 3))))))
(provide 'hywiki-tests)
diff --git a/test/kcell-tests.el b/test/kcell-tests.el
index f51ea46f6e..d73856b63d 100644
--- a/test/kcell-tests.el
+++ b/test/kcell-tests.el
@@ -1,13 +1,9 @@
;;; kcell-tests.el --- Test for kcells in Koutliner -*-
lexical-binding: t; -*-
-;; usage: GNU Emacs Lisp Library
-;; keywords: test
;;
-;; author: Mats Lidell
-;; org: Free Software Foundation, Inc.
-;; e-mail: [email protected]
+;; Author: Mats Lidell
;;
-;; orig-date: 16-Feb-22 at 23:28:49
-;; last-mod: 16-Mar-25 at 10:15:23 by Bob Weiner
+;; Orig-Date: 16-Feb-22 at 23:28:49
+;; Last-Mod: 16-Mar-25 at 10:15:23 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
diff --git a/test/kotl-orgtbl-tests.el b/test/kotl-orgtbl-tests.el
index e7ae250b22..9b44950b60 100644
--- a/test/kotl-orgtbl-tests.el
+++ b/test/kotl-orgtbl-tests.el
@@ -7,7 +7,7 @@
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 2021-2023 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2025 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
diff --git a/topwin.py b/topwin.py
index 326fcbab72..99b07a3637 100644
--- a/topwin.py
+++ b/topwin.py
@@ -9,7 +9,7 @@
# ORIG-DATE: 14-Oct-17 at 16:21:53
# LAST-MOD: 24-Jan-22 at 00:52:47 by Bob Weiner
#
-# Copyright (C) 2017 Free Software Foundation, Inc.
+# Copyright (C) 2017-2022 Free Software Foundation, Inc.
# See the "HY-COPY" file for license information.
#
# DESCRIPTION: