Received: (at submit) by debbugs.gnu.org; 4 Mar 2024 11:45:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Mar 04 06:45:37 2024
Received: from localhost ([127.0.0.1]:42196 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1rh6lE-0001lf-On
for submit <at> debbugs.gnu.org; Mon, 04 Mar 2024 06:45:37 -0500
Received: from lists.gnu.org ([209.51.188.17]:50186)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <gabriele@HIDDEN>) id 1rh6lC-0001gI-Tu
for submit <at> debbugs.gnu.org; Mon, 04 Mar 2024 06:45:35 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <gabriele@HIDDEN>)
id 1rh6kf-000802-FL
for bug-gnu-emacs@HIDDEN; Mon, 04 Mar 2024 06:45:02 -0500
Received: from smtp02.cbsolt.net ([185.97.217.41])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <gabriele@HIDDEN>)
id 1rh6kb-0006l7-9V
for bug-gnu-emacs@HIDDEN; Mon, 04 Mar 2024 06:45:01 -0500
Received: from [10.0.2.15] (host-79-16-242-199.retail.telecomitalia.it
[79.16.242.199])
by smtp02.cbsolt.net (Postfix) with ESMTPSA id 4TpH1G1H8zz3wbB
for <bug-gnu-emacs@HIDDEN>; Mon, 4 Mar 2024 12:44:49 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cbsolt.net;
s=201504-di4k2w; t=1709552691;
bh=vLY9SZaq3M1s16W8tnjAfGutHaN9DH2VnOK/gluJjc0=;
h=Date:To:From:Subject:From;
b=URHBGVly+KQ+sbUhuiWLFRzmq97Fn3KRFxwljrbDkQdFQUl5Id/8iuwn9E9uQDEQf
NeBVFaYvQNfayCL3rdW/t1mMBStoN7PvJhrc2KOf2r9mI80/mCYYHGpuM5i9z+S2hZ
Thq93CMBaQrroc1jp7uur0xLKF7pJMP22sE2nObE=
Content-Type: multipart/alternative;
boundary="------------zrEEoRN1SeuqiwV3Q46w2Jya"
Message-ID: <6071eb9a-fa15-45fb-9917-7a35c7556680@HIDDEN>
Date: Mon, 4 Mar 2024 12:44:48 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
To: bug-gnu-emacs@HIDDEN
Content-Language: en-US
From: Gabriele Nicolardi <gabriele@HIDDEN>
Subject: Feature request: making occur obey isearch-filter-predicate
Received-SPF: pass client-ip=185.97.217.41;
envelope-from=gabriele@HIDDEN; helo=smtp02.cbsolt.net
X-Spam_score_int: -25
X-Spam_score: -2.6
X-Spam_bar: --
X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7,
RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001,
SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.3 (-)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.3 (--)
This is a multi-part message in MIME format.
--------------zrEEoRN1SeuqiwV3Q46w2Jya
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Hi,
I’d like occur to obey to |isearch-filter-predicate| like query-replace*
and |isearch*| commands.
This is an example of what I do:
|(defmacro with-ifp-predicates (PREDICATES &rest body) "Allows assigning
a list of predicates to the variable `isearch-filter-predicate'. |
Below is an example of usage:
|(with-ifp-predicates '(skip-maths skip-comments) (query-replace \"foo\"
\"bar\" nil (point-min) (point-max)))" (declare (indent 1)) `(let
((isearch-filter-predicate isearch-filter-predicate)) (mapc (lambda
(predicate) (add-function :before-while isearch-filter-predicate
predicate)) ,PREDICATES) ,@body)) |
(I always use let-binding for operations that involve
|isearch-filter-predicate|.)
In some cases, I would like to have something like this:
|(with-ifp-predicates '(predicate1 predicate2) (save-window-excursion
(occur "foo") (query-replace \"foo\" \"bar\" nil (point-min) (point-max)))) |
with |occur| showing me only the strings that match the active predicates.
I wrote a mail to emacs-devel@HIDDEN and I have verified that others
also believe that this solution would be helpful and consistent with the
functioning of some other functions defined in |replace.el|.
I’d also like to add this feature to the |how-many| function.
I already wrote this modified version (Emacs 29.2):
|(defun re-search-forward-ifp (REGEXP &optional BOUND NOERROR COUNT)
"Modified version of `search-forward-regexp' that filters (skips)
matches according to `isearch-filter-predicate'." (let ((POINT (point)))
(catch 'filtered (while (search-forward-regexp REGEXP BOUND NOERROR
COUNT) (let ((B (match-beginning 0)) (E (match-end 0))) (when (funcall
isearch-filter-predicate B E) (throw 'filtered (point))))) (goto-char
POINT) nil))) (defalias 'search-forward-regexp-ifp
're-search-forward-ifp) (defun how-many-ifp (regexp &optional rstart
rend interactive) "Modified version of `how-many' that filters (skips)
matches according to `isearch-filter-predicate'." (interactive
(keep-lines-read-args "How many matches for regexp")) (save-excursion
(if rstart (if rend (progn (goto-char (min rstart rend)) (setq rend (max
rstart rend))) (goto-char rstart) (setq rend (point-max))) (if (and
interactive (use-region-p)) (setq rstart (region-beginning) rend
(region-end)) (setq rstart (point) rend (point-max))) (goto-char
rstart)) (let ((count 0) (case-fold-search (if (and case-fold-search
search-upper-case) (isearch-no-upper-case-p regexp t)
case-fold-search))) (while (and (< (point) rend) (re-search-forward-ifp
regexp rend t)) ;; Ensure forward progress on zero-length matches like
"^$". (when (and (= (match-beginning 0) (match-end 0)) (not (eobp)))
(forward-char 1)) (setq count (1+ count))) (when interactive (message
(ngettext "%d occurrence" "%d occurrences" count) count)) count)))
(defalias 'count-matches-ifp 'how-many-ifp) |
Best regards,
Gabriele Nicolardi
--------------zrEEoRN1SeuqiwV3Q46w2Jya
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="markdown-here-wrapper" data-md-url="" style=""
markdown-here-wrapper-content-modified="true">
<p style="margin: 0px 0px 1.2em !important;">Hi,</p>
<p style="margin: 0px 0px 1.2em !important;">I’d like occur to
obey to <code
style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;">isearch-filter-predicate</code>
like query-replace* and <code
style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;">isearch*</code>
commands.</p>
<p style="margin: 0px 0px 1.2em !important;">This is an example of
what I do:</p>
<pre
style="font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code
style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block;">(defmacro with-ifp-predicates (PREDICATES &rest body)
"Allows assigning a list of predicates to the
variable `isearch-filter-predicate'.
</code></pre>
<p style="margin: 0px 0px 1.2em !important;"> Below is an example
of usage:</p>
<pre
style="font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code
style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block;">(with-ifp-predicates '(skip-maths skip-comments)
(query-replace \"foo\" \"bar\" nil (point-min) (point-max)))"
(declare (indent 1))
`(let ((isearch-filter-predicate isearch-filter-predicate))
(mapc (lambda (predicate)
(add-function :before-while isearch-filter-predicate predicate))
,PREDICATES)
,@body))
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">(I always use
let-binding for operations that involve <code
style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;">isearch-filter-predicate</code>.)</p>
<p style="margin: 0px 0px 1.2em !important;">In some cases, I
would like to have something like this:</p>
<pre
style="font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code
style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block;">(with-ifp-predicates '(predicate1 predicate2)
(save-window-excursion
(occur "foo")
(query-replace \"foo\" \"bar\" nil (point-min) (point-max))))
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">with <code
style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;">occur</code>
showing me only the strings that match the active predicates.</p>
<p style="margin: 0px 0px 1.2em !important;">I wrote a mail to <a
href="mailto:emacs-devel@HIDDEN"
class="moz-txt-link-freetext">emacs-devel@HIDDEN</a> and I
have verified that others also believe that this solution would
be helpful and consistent with the functioning of some other
functions defined in <code
style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;">replace.el</code>.</p>
<p style="margin: 0px 0px 1.2em !important;">I’d also like to add
this feature to the <code
style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;">how-many</code>
function.</p>
<p style="margin: 0px 0px 1.2em !important;">I already wrote this
modified version (Emacs 29.2):</p>
<pre
style="font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code
style="font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; font-weight: 550; background-color: rgba(119, 119, 119, 0.3); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block;">
(defun re-search-forward-ifp (REGEXP &optional BOUND NOERROR COUNT)
"Modified version of `search-forward-regexp' that
filters (skips) matches according to `isearch-filter-predicate'."
(let ((POINT (point)))
(catch 'filtered
(while (search-forward-regexp REGEXP BOUND NOERROR COUNT)
(let ((B (match-beginning 0))
(E (match-end 0)))
(when (funcall isearch-filter-predicate B E)
(throw 'filtered (point)))))
(goto-char POINT)
nil)))
(defalias 'search-forward-regexp-ifp 're-search-forward-ifp)
(defun how-many-ifp (regexp &optional rstart rend interactive)
"Modified version of `how-many' that filters (skips) matches
according to `isearch-filter-predicate'."
(interactive
(keep-lines-read-args "How many matches for regexp"))
(save-excursion
(if rstart
(if rend
(progn
(goto-char (min rstart rend))
(setq rend (max rstart rend)))
(goto-char rstart)
(setq rend (point-max)))
(if (and interactive (use-region-p))
(setq rstart (region-beginning)
rend (region-end))
(setq rstart (point)
rend (point-max)))
(goto-char rstart))
(let ((count 0)
(case-fold-search
(if (and case-fold-search search-upper-case)
(isearch-no-upper-case-p regexp t)
case-fold-search)))
(while (and (< (point) rend)
(re-search-forward-ifp regexp rend t))
;; Ensure forward progress on zero-length matches like "^$".
(when (and (= (match-beginning 0) (match-end 0))
(not (eobp)))
(forward-char 1))
(setq count (1+ count)))
(when interactive (message (ngettext "%d occurrence"
"%d occurrences"
count)
count))
count)))
(defalias 'count-matches-ifp 'how-many-ifp)
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">Best regards,</p>
<p style="margin: 0px 0px 1.2em !important;">Gabriele Nicolardi</p>
<div
title="MDH:PHA+SGksPC9wPjxwPkknZCBsaWtlIG9jY3VyIHRvIG9iZXkgdG8gYGlzZWFyY2gtZmlsdGVyLXBy
ZWRpY2F0ZWAgbGlrZSBxdWVyeS1yZXBsYWNlKiBhbmQgYGlzZWFyY2gqYCBjb21tYW5kcy48L3A+
PHA+VGhpcyBpcyBhbiBleGFtcGxlIG9mIHdoYXQgSSBkbzo8L3A+PHA+YGBgPGJyPjwvcD4KICAg
IDxwPihkZWZtYWNybyB3aXRoLWlmcC1wcmVkaWNhdGVzIChQUkVESUNBVEVTICZhbXA7cmVzdCBi
b2R5KTxicj4KICAgICAgJm5ic3A7ICJBbGxvd3MgYXNzaWduaW5nIGEgbGlzdCBvZiBwcmVkaWNh
dGVzIHRvIHRoZTxicj4KICAgICAgdmFyaWFibGUgYGlzZWFyY2gtZmlsdGVyLXByZWRpY2F0ZScu
PGJyPgogICAgICBgYGA8YnI+CiAgICAgIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YgdXNhZ2U6PGJy
PgogICAgICBgYGA8YnI+CiAgICAgICh3aXRoLWlmcC1wcmVkaWNhdGVzICcoc2tpcC1tYXRocyBz
a2lwLWNvbW1lbnRzKTxicj4KICAgICAgJm5ic3A7IChxdWVyeS1yZXBsYWNlIFwiZm9vXCIgXCJi
YXJcIiBuaWwgKHBvaW50LW1pbikgKHBvaW50LW1heCkpKSI8YnI+CiAgICAgICZuYnNwOyAoZGVj
bGFyZSAoaW5kZW50IDEpKTxicj4KICAgICAgJm5ic3A7IGAobGV0ICgoaXNlYXJjaC1maWx0ZXIt
cHJlZGljYXRlIGlzZWFyY2gtZmlsdGVyLXByZWRpY2F0ZSkpPGJyPgogICAgICAmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsgKG1hcGMgKGxhbWJkYSAocHJlZGljYXRlKTxicj4KICAgICAgJm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IChhZGQtZnVuY3Rpb24gOmJlZm9yZS13aGlsZQogICAgICBp
c2VhcmNoLWZpbHRlci1wcmVkaWNhdGUgcHJlZGljYXRlKSk8YnI+CiAgICAgICZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyAsUFJFRElDQVRFUyk8YnI+CiAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAsQGJv
ZHkpKTwvcD4KICAgIDxwPmBgYDwvcD48cD4oSSBhbHdheXMgdXNlIGxldC1iaW5kaW5nIGZvciBv
cGVyYXRpb25zIHRoYXQgaW52b2x2ZQogICAgICBgaXNlYXJjaC1maWx0ZXItcHJlZGljYXRlYC4p
PC9wPgogICAgPHA+SW4gc29tZSBjYXNlcywgSSB3b3VsZCBsaWtlIHRvIGhhdmUgc29tZXRoaW5n
IGxpa2UgdGhpczo8L3A+CiAgICA8cD5gYGA8L3A+PHA+KHdpdGgtaWZwLXByZWRpY2F0ZXMgJyhw
cmVkaWNhdGUxIHByZWRpY2F0ZTIpPGJyPgogICAgICAmbmJzcDsgKHNhdmUtd2luZG93LWV4Y3Vy
c2lvbjxicj4KICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7IChvY2N1ciAiZm9vIik8YnI+CiAgICAg
ICZuYnNwOyZuYnNwOyZuYnNwOyAocXVlcnktcmVwbGFjZSBcImZvb1wiIFwiYmFyXCIgbmlsIChw
b2ludC1taW4pIChwb2ludC1tYXgpKSkpPGJyPgogICAgPC9wPgogICAgPHA+YGBgPC9wPjxwPndp
dGggYDxjb2RlPm9jY3VyYDwvY29kZT4gc2hvd2luZyBtZSBvbmx5IHRoZSBzdHJpbmdzIHRoYXQg
bWF0Y2gKICAgICAgdGhlIGFjdGl2ZSBwcmVkaWNhdGVzLjwvcD48cD48L3A+PHA+SSB3cm90ZSBh
IG1haWwgdG8gZW1hY3MtZGV2ZWxAZ251Lm9yZyBhbmQgSSBoYXZlIHZlcmlmaWVkIHRoYXQgb3Ro
ZXJzIGFsc28gYmVsaWV2ZSB0aGF0IHRoaXMgc29sdXRpb24gd291bGQgYmUgCmhlbHBmdWwgYW5k
IGNvbnNpc3RlbnQgd2l0aCB0aGUgZnVuY3Rpb25pbmcgb2Ygc29tZSBvdGhlciBmdW5jdGlvbnMg
CmRlZmluZWQgaW4gPGNvZGU+YHJlcGxhY2UuZWxgPC9jb2RlPi48L3A+PHA+SSdkIGFsc28gbGlr
ZSB0byBhZGQgdGhpcyBmZWF0dXJlIHRvIHRoZSBgaG93LW1hbnlgIGZ1bmN0aW9uLjwvcD48cD5J
IGFscmVhZHkgd3JvdGUgdGhpcyBtb2RpZmllZCB2ZXJzaW9uIChFbWFjcyAyOS4yKTo8YnI+YGBg
PC9wPjxwPihkZWZ1biByZS1zZWFyY2gtZm9yd2FyZC1pZnAgKFJFR0VYUCAmYW1wO29wdGlvbmFs
IEJPVU5EIE5PRVJST1IgQ09VTlQpPGJyPiZuYnNwOyAiTW9kaWZpZWQgdmVyc2lvbiBvZiBgc2Vh
cmNoLWZvcndhcmQtcmVnZXhwJyB0aGF0PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyBmaWx0ZXJzIChz
a2lwcykgbWF0Y2hlcyBhY2NvcmRpbmcgdG8gYGlzZWFyY2gtZmlsdGVyLXByZWRpY2F0ZScuIjxi
cj48YnI+Jm5ic3A7IChsZXQgKChQT0lOVCAocG9pbnQpKSk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7
IChjYXRjaCAnZmlsdGVyZWQ8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICh3aGls
ZSAoc2VhcmNoLWZvcndhcmQtcmVnZXhwIFJFR0VYUCBCT1VORCBOT0VSUk9SIENPVU5UKTxicj4m
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgKGxldCAoKEIgKG1hdGNo
LWJlZ2lubmluZyAwKSk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IChFIChtYXRjaC1lbmQgMCkp
KTxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsgKHdoZW4gKGZ1bmNhbGwgaXNlYXJjaC1maWx0ZXItcHJlZGljYXRlIEIgRSk8YnI+Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7ICh0aHJvdyAnZmlsdGVyZWQgKHBvaW50KSkpKSk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7IChnb3RvLWNoYXIgUE9JTlQpPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyBuaWwpKSk8YnI+KGRlZmFsaWFzICdzZWFyY2gtZm9yd2FyZC1yZWdleHAtaWZwICdyZS1z
ZWFyY2gtZm9yd2FyZC1pZnApPGJyPjxicj4oZGVmdW4gaG93LW1hbnktaWZwIChyZWdleHAgJmFt
cDtvcHRpb25hbCByc3RhcnQgcmVuZCBpbnRlcmFjdGl2ZSk8YnI+Jm5ic3A7ICJNb2RpZmllZCB2
ZXJzaW9uIG9mIGBob3ctbWFueScgdGhhdCBmaWx0ZXJzIChza2lwcykgbWF0Y2hlczxicj4mbmJz
cDsmbmJzcDsmbmJzcDsgYWNjb3JkaW5nIHRvIGBpc2VhcmNoLWZpbHRlci1wcmVkaWNhdGUnLiI8
YnI+PGJyPiZuYnNwOyAoaW50ZXJhY3RpdmU8YnI+Jm5ic3A7Jm5ic3A7IChrZWVwLWxpbmVzLXJl
YWQtYXJncyAiSG93IG1hbnkgbWF0Y2hlcyBmb3IgcmVnZXhwIikpPGJyPiZuYnNwOyAoc2F2ZS1l
eGN1cnNpb248YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IChpZiByc3RhcnQ8YnI+Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IChpZiByZW5kPGJyPiZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAocHJv
Z248YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IChnb3RvLWNoYXIgKG1pbiByc3RhcnQgcmVuZCkp
PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAoc2V0cSByZW5kIChtYXggcnN0YXJ0IHJlbmQpKSk8
YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
IChnb3RvLWNoYXIgcnN0YXJ0KTxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgKHNldHEgcmVuZCAocG9pbnQtbWF4KSkpPGJyPiZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAoaWYgKGFuZCBpbnRlcmFjdGl2ZSAodXNlLXJlZ2lvbi1w
KSk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7IChzZXRxIHJzdGFydCAocmVnaW9uLWJlZ2lubmluZyk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7IHJlbmQgKHJlZ2lvbi1lbmQpKTxicj4mbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgKHNldHEgcnN0YXJ0IChwb2ludCk8YnI+Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7IHJlbmQgKHBvaW50LW1heCkpKTxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsgKGdvdG8tY2hhciByc3RhcnQpKTxicj4mbmJzcDsmbmJzcDsmbmJzcDsgKGxldCAo
KGNvdW50IDApPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyAoY2FzZS1mb2xkLXNlYXJjaDxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgKGlmIChhbmQgY2FzZS1mb2xkLXNl
YXJjaCBzZWFyY2gtdXBwZXItY2FzZSk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IChp
c2VhcmNoLW5vLXVwcGVyLWNhc2UtcCByZWdleHAgdCk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNhc2Ut
Zm9sZC1zZWFyY2gpKSk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICh3aGlsZSAo
YW5kICgmbHQ7IChwb2ludCkgcmVuZCk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7IChyZS1zZWFyY2gtZm9yd2FyZC1pZnAgcmVnZXhwIHJlbmQgdCkpPGJy
PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA7OyBFbnN1cmUgZm9y
d2FyZCBwcm9ncmVzcyBvbiB6ZXJvLWxlbmd0aCBtYXRjaGVzIGxpa2UgIl4kIi48YnI+Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICh3aGVuIChhbmQgKD0gKG1hdGNo
LWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApKTxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgKG5vdCAoZW9icCkpKTxicj4mbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgKGZvcndhcmQtY2hhciAx
KSk8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IChzZXRxIGNv
dW50ICgxKyBjb3VudCkpKTxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgKHdoZW4g
aW50ZXJhY3RpdmUgKG1lc3NhZ2UgKG5nZXR0ZXh0ICIlZCBvY2N1cnJlbmNlIjxicj4mbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsgIiVkIG9jY3VycmVuY2VzIjxicj4mbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsgY291bnQpPGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjb3VudCkpPGJyPiZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjb3VudCkpKTxicj4oZGVmYWxpYXMgJ2NvdW50LW1hdGNo
ZXMtaWZwICdob3ctbWFueS1pZnApPGJyPjwvcD48cD5gYGA8YnI+PC9wPjxwPkJlc3QgcmVnYXJk
cyw8L3A+PHA+R2FicmllbGUgTmljb2xhcmRpPGJyPjwvcD4=" aria-hidden="true"
style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0;padding:0;margin:0;"></div>
</div>
</body>
</html>
--------------zrEEoRN1SeuqiwV3Q46w2Jya--
Gabriele Nicolardi <gabriele@HIDDEN>:bug-gnu-emacs@HIDDEN.
Full text available.bug-gnu-emacs@HIDDEN:bug#69542; Package emacs.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.