From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id kOhMCOcf1V6dOQAA0tVLHw (envelope-from ) for ; Mon, 01 Jun 2020 15:33:59 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id cAMVBOcf1V5jOwAA1q6Kng (envelope-from ) for ; Mon, 01 Jun 2020 15:33:59 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 39DE094036C for ; Mon, 1 Jun 2020 15:33:58 +0000 (UTC) Received: from localhost ([::1]:48126 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jfmRp-0004bB-0b for larch@yhetil.org; Mon, 01 Jun 2020 11:33:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45788) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jfmRF-0004ZZ-Hf for emacs-orgmode@gnu.org; Mon, 01 Jun 2020 11:33:21 -0400 Received: from mail-vs1-xe36.google.com ([2607:f8b0:4864:20::e36]:38536) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jfmRD-0001vp-Kx for emacs-orgmode@gnu.org; Mon, 01 Jun 2020 11:33:21 -0400 Received: by mail-vs1-xe36.google.com with SMTP id r11so165531vsj.5 for ; Mon, 01 Jun 2020 08:33:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=91A7SkELbNNdht+tJVQSm6SD5AqSe6k260a7T7yY16s=; b=g1d5zSGbVmcJdRrYEt+0aH/YLGPRkbZG0UpeaYVFaeWrhmVF38y1oQdK7xp7UqQVmW QklOQ9nHFNqf+DfxJBSNChjmIlB9ZVjeYVOQUQaYSMNMCwJ3VXDuLaCCBMGjtLxVs7sd 0ObVvCNvFV8YwPjwmmmz452KoZbBZ6msVtx2CE79GuG/XhYZf8/MP6Ii+d8ureZiniJl mZymR6GLyr0doKXaw8uyagxiONz39gKdhcNOxs+2y/UovEioT5qKcemNljLva9Uas4qr hRIXx2GIIQsovYVKuYxGfXR+7bZ3D/ecunvpJFGECGW7SF6sG+LI49CzaVdmBxwwlnSK vgLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=91A7SkELbNNdht+tJVQSm6SD5AqSe6k260a7T7yY16s=; b=P3Tt08mKAjpeO3RSIS68UEyviLO9bP+zcXu5l8/FoXGisx87Op/0bCGn7mkdY4d6Ri I0ENWELa/bAH5A8L4O4I1CW0FHSKZJ5LOBVqrJkLCYDHqykYdHJUiYknW4lPzQgVT1Tk KQP8GoxW3fIfP4cwCFTndjN+E+gHJgeyEp4t3lbsg7zIgGbyAsVV3LspqjRGtpGwFRrF aDAkVy3gZFgYSzOLFH5C+/AHbR74FOABCzC0CKyF9huB9f7TpU1oB7P8gQAyBdJgL27f +4xbRwbmeOLvCEYwBh45S35D9SDU6QmKkMgMALqOOuZpHuV8NgXzzCOPuiOgqqJ1KaSE 6V6A== X-Gm-Message-State: AOAM531x1i1eOJdaNOO4q8XzmBlC9/W0+cs0KtkYzmDq2YwyA8hqLJif E1qZRgjNSaNy0DvUaJqn/HbIGxpFA+X0THbjysC0WNOyNIQ= X-Google-Smtp-Source: ABdhPJwwH2vGmTqBXkcz3XLh0aJtGQ/e9I62XXD/XpgrQtVWiVg8nFnCJdw7o5gNze9gUO6ssNIwSCYCQQRzrVcr/Qs= X-Received: by 2002:a67:d10c:: with SMTP id u12mr15087909vsi.218.1591025598096; Mon, 01 Jun 2020 08:33:18 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Shankar Rao Date: Mon, 1 Jun 2020 17:33:06 +0200 Message-ID: Subject: Re: [PATCH] Add mode for automatically unhiding emphasis markers in the current region To: emacs-orgmode@gnu.org Content-Type: multipart/mixed; boundary="0000000000009adcf705a707835b" Received-SPF: pass client-ip=2607:f8b0:4864:20::e36; envelope-from=shankar.rao@gmail.com; helo=mail-vs1-xe36.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=fail (body hash did not verify) header.d=gmail.com header.s=20161025 header.b=g1d5zSGb; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Spam-Score: 0.09 X-TUID: XtfTZAVtQJLb --0000000000009adcf705a707835b Content-Type: multipart/alternative; boundary="0000000000009adcf405a7078359" --0000000000009adcf405a7078359 Content-Type: text/plain; charset="UTF-8" Sorry, I've never submitted a patch before. Looking through this mailing list, I see that you're supposed to attach the .patch file to the e-mail, so here it is. This patch adds a minor mode that makes emphasis markers be automatically unhidden when the point is inside the region of emphasis and then the markers are rehidden when the point is moved elsewhere. I posted this on /r/orgmode on reddit ( https://www.reddit.com/r/orgmode/comments/gss1g4/update_i_made_my_own_sbrorgemphasizemode_that/), and people there suggested that I submit this here as a patch. Shankar On Mon, Jun 1, 2020 at 4:14 PM Shankar Rao wrote: > * lisp/org.el: > (org-auto-emphasis-unhide-at-point): Parameter that controls the > behavior of Org Auto Emphasis mode. It can be one of the values nil, t, > and > 'right-edge, and works similarly to the parameter > `prettify-symbols-unprettify-at-point' for `prettify-symbols-mode'. > (org-do-emphasis-faces): When hiding emphasis markers, add additional > text properties 'org-emph-start and org-emph-end to the emphasized > region. > (org-auto-emphasis--current-region-bounds): Local variable containing > the bounds of the region whose emphasis markers are currently > unhidden. > (org-auto-emphasis--get-prop-as-list): Helper function that returns > Org Auto Emphasis properties as a list. > (org-auto-emphasis--post-command-hook): Function added to > `post-command-hook' that rehides emphasis markers for the previous > region and unhides emphasis marks for the current region. > (org-auto-emphasis-mode): Toggles Org Auto Emphasis mode. Can be > added to `org-mode-hook' to be enabled for all org-mode files. > > This code was adapted from prettify-symbols-mode in prog-mode.el > > I have not yet signed the papers assigning copyright to the FSF. I sent a > request for the papers to assign@gnu.org, but have not yet received a > response. > > Shankar Rao > > --- > lisp/org.el | 98 +++++++++++++++++++++++++++++++++++++++++++++++------ > 1 file changed, 87 insertions(+), 11 deletions(-) > > diff --git a/lisp/org.el b/lisp/org.el > index 7ff7ec685..870c5c958 100644 > --- a/lisp/org.el > +++ b/lisp/org.el > @@ -3644,6 +3644,19 @@ following symbols: > :type 'boolean > :safe #'booleanp) > > +(defcustom org-auto-emphasis-unhide-at-point nil > + "If non-nil, unhide the emphasis markers for the region when point is > on it. > +If set to the symbol `right-edge', also unhide the emphasis > +markers if point is immediately after the emphasized region. The > +emphasis markers will be rehidden as soon as point moves away > +from the region. If set to nil, the emphasis markers remain > +hidden even when point is in the region." > + :version "25.1" > + :type '(choice (const :tag "Never unhide emphasis markers" nil) > + (const :tag "Unhide emphasis markers when point is > inside" t) > + (const :tag "Unhide emphasis markers when point is > inside or at right edge" right-edge)) > + :group 'org-appearance) > + > (defcustom org-hide-macro-markers nil > "Non-nil mean font-lock should hide the brackets marking macro calls." > :group 'org-appearance > @@ -5056,12 +5069,77 @@ stacked delimiters is N. Escaping delimiters is > not possible." > '(font-lock-multiline t org-emphasis t)) > (when (and org-hide-emphasis-markers > (not (org-at-comment-p))) > - (add-text-properties (match-end 4) (match-beginning 5) > - '(invisible org-link)) > - (add-text-properties (match-beginning 3) (match-end 3) > - '(invisible org-link))) > + (let ((s1 (match-beginning 3)) > + (e1 (match-end 3)) > + (s2 (match-end 4)) > + (e2 (match-beginning 5))) > + (add-text-properties s2 e2 '(invisible org-link)) > + (add-text-properties s1 e1 '(invisible org-link)) > + (add-text-properties s1 e2 > + `(org-emph-start ,s1 org-emph-end ,e2)))) > (throw :exit t)))))))) > > +(defvar-local org-auto-emphasis--current-region-bounds nil) > + > +(defun org-auto-emphasis--get-prop-as-list (prop) > + "Helper function to get org-auto-emphasis properties as a list. > +If `org-auto-emphasis-unhide-at-point' is set to `t' then return > +the text property PROP at point in a list. If > +`org-auto-emphasis-unhide-at-point' is set to `right-edge', the > +also include the text property PROP at point-1 unless we are at > +the beginning of the buffer." > + (remove nil > + (list (get-text-property (point) prop) > + (when (and (eq org-auto-emphasis-unhide-at-point 'right-edge) > + (not (bobp))) > + (get-text-property (1- (point)) prop))))) > + > +(defun org-auto-emphasis--post-command-hook () > + ;; Rehide emphasis markers for the previous region. > + (when (and org-auto-emphasis--current-region-bounds > + (or (< (point) (car org-auto-emphasis--current-region-bounds)) > + (> (point) (cadr org-auto-emphasis--current-region-bounds)) > + (and (not (eq org-auto-emphasis-unhide-at-point 'right-edge)) > + (= (point) (cadr org-auto-emphasis--current-region-bounds))))) > + (apply #'font-lock-flush org-auto-emphasis--current-region-bounds) > + (setq org-auto-emphasis--current-region-bounds nil)) > + ;; Unhide emphasis markers for the current region. > + (when-let* ((s (org-auto-emphasis--get-prop-as-list 'org-emph-start)) > + (e (org-auto-emphasis--get-prop-as-list 'org-emph-end)) > + (s (apply #'min s)) > + (e (apply #'max e))) > + (with-silent-modifications > + (setq org-auto-emphasis--current-region-bounds (list s e)) > + (remove-text-properties s (1+ s) '(invisible org-link)) > + (remove-text-properties (1- e) e '(invisible org-link))))) > + > +(define-minor-mode org-auto-emphasis-mode > + "Toggle Org Auto Emphasis mode. > +This mode, when enabled, unhides emphasis markers for the region > +at point, depending on the value of > +`org-auto-emphasis-unhide-at-point'. With a prefix argument ARG, > +enable Org Auto Emphasis mode if ARG is positive, and disable it > +otherwise. If called from Lisp, enable the mode if ARG is > +omitted or nil. > + > +To enable this in all org-mode files, add the following line to init.el: > + > + (add-hook 'org-mode #'org-auto-emphasis-mode) > +" > + :init-value nil > + (if org-auto-emphasis-mode > + ;; Turn on > + (progn > + (setq-local font-lock-extra-managed-props > + (append font-lock-extra-managed-props > + '(org-emph-start org-emph-end))) > + (when org-auto-emphasis-unhide-at-point > + (add-hook 'post-command-hook > + #'org-auto-emphasis--post-command-hook nil t)) > + (font-lock-flush)) > + ;; Turn off > + (remove-hook 'post-command-hook > #'org-auto-emphasis--post-command-hook t))) > + > (defun org-emphasize (&optional char) > "Insert or change an emphasis, i.e. a font like bold or italic. > If there is an active region, change that region to a new emphasis. > @@ -20482,16 +20560,15 @@ With ARG, repeats or can move backward if > negative." > (beginning-of-line)) > (_ nil))) > (cl-incf arg)) > - (while (and (> arg 0) (re-search-forward regexp nil t)) > + (while (and (> arg 0) (re-search-forward regexp nil :move)) > (pcase (get-char-property-and-overlay (point) 'invisible) > (`(outline . ,o) > (goto-char (overlay-end o)) > - (skip-chars-forward " \t\n") > - (end-of-line)) > + (end-of-line 2)) > (_ > (end-of-line))) > (cl-decf arg)) > - (if (> arg 0) (goto-char (point-max)) (beginning-of-line)))) > + (when (/= arg initial-arg) (beginning-of-line)))) > > (defun org-previous-visible-heading (arg) > "Move to the previous visible heading. > @@ -20830,11 +20907,10 @@ ones already marked." > (set-mark > (save-excursion > (goto-char (mark)) > - (goto-char (org-element-property :end (org-element-at-point))) > - (point))) > + (goto-char (org-element-property :end (org-element-at-point))))) > (let ((element (org-element-at-point))) > (end-of-line) > - (push-mark (min (point-max) (org-element-property :end element)) t t) > + (push-mark (org-element-property :end element) t t) > (goto-char (org-element-property :begin element)))))) > > (defun org-narrow-to-element () > -- > 2.17.1 > --0000000000009adcf405a7078359 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Sorry, I've never submitted a patch before. Looki= ng through this mailing list, I see that you're supposed to attach the = .patch file to the e-mail, so here it is.

This pat= ch adds a minor mode that makes emphasis markers be automatically unhidden = when the point is inside the region of emphasis and then the markers are re= hidden when the point is moved elsewhere. I posted this on /r/orgmode on re= ddit (https://www.reddit.com/r/orgmode/com= ments/gss1g4/update_i_made_my_own_sbrorgemphasizemode_that/), and peopl= e there suggested that I submit this here as a patch.

<= div>Shankar

On Mon, Jun 1, 2020 at 4:14 PM Shankar Rao <shankar.rao@gmail.com> wrote:
<= /div>
* lisp/org.el:
(org-auto-emphasis-unh= ide-at-point): Parameter that controls the
behavior of Org Auto Emphasis= mode.=C2=A0 It can be one of the values nil, t, and
'right-edge, an= d works similarly to the parameter
`prettify-symbols-unprettify-at-point= ' for `prettify-symbols-mode'.
(org-do-emphasis-faces): When hid= ing emphasis markers, add additional
text properties 'org-emph-start= and org-emph-end to the emphasized
region.
(org-auto-emphasis--curre= nt-region-bounds): Local variable containing
the bounds of the region wh= ose emphasis markers are currently
unhidden.
(org-auto-emphasis--get-= prop-as-list): Helper function that returns
Org Auto Emphasis properties= as a list.
(org-auto-emphasis--post-command-hook): Function added to`post-command-hook' that rehides emphasis markers for the previous
= region and unhides emphasis marks for the current region.
(org-auto-emph= asis-mode): Toggles Org Auto Emphasis mode.=C2=A0 Can be
added to `org-m= ode-hook' to be enabled for all org-mode files.

This code was ad= apted from prettify-symbols-mode in prog-mode.el

I have not yet sign= ed the papers assigning copyright to the FSF.=C2=A0 I sent a
request for= the papers to assign@g= nu.org, but have not yet received a
response.

Shankar Rao
=
---
=C2=A0lisp/org.el | 98 +++++++++++++++++++++++++++++++++++++++++= ++++++------
=C2=A01 file changed, 87 insertions(+), 11 deletions(-)
=
diff --git a/lisp/org.el b/lisp/org.el
index 7ff7ec685..870c5c958 10= 0644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -3644,6 +3644,19 @@ fo= llowing symbols:
=C2=A0 =C2=A0:type 'boolean
=C2=A0 =C2=A0:safe #= 'booleanp)
=C2=A0
+(defcustom org-auto-emphasis-unhide-at-point n= il
+ =C2=A0"If non-nil, unhide the emphasis markers for the region = when point is on it.
+If set to the symbol `right-edge', also unhide= the emphasis
+markers if point is immediately after the emphasized regi= on.=C2=A0 The
+emphasis markers will be rehidden as soon as point moves = away
+from the region.=C2=A0 If set to nil, the emphasis markers remain<= br>+hidden even when point is in the region."
+ =C2=A0:version &quo= t;25.1"
+ =C2=A0:type '(choice (const :tag "Never unhide e= mphasis markers" nil)
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 (const :tag "Unhide emphasis markers when point is insid= e" t)
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (co= nst :tag "Unhide emphasis markers when point is inside or at right edg= e" right-edge))
+ =C2=A0:group 'org-appearance)
+
=C2=A0(= defcustom org-hide-macro-markers nil
=C2=A0 =C2=A0"Non-nil mean fon= t-lock should hide the brackets marking macro calls."
=C2=A0 =C2=A0= :group 'org-appearance
@@ -5056,12 +5069,77 @@ stacked delimiters is= N.=C2=A0 Escaping delimiters is not possible."
=C2=A0 =C2=A0 '= (font-lock-multiline t org-emphasis t))
=C2=A0 =C2=A0 =C2=A0 =C2=A0(when= (and org-hide-emphasis-markers
=C2=A0 (not (org-at-comment-p)))
- (a= dd-text-properties (match-end 4) (match-beginning 5)
- =C2=A0 =C2=A0 = 9;(invisible org-link))
- (add-text-properties (match-beginning 3) (matc= h-end 3)
- =C2=A0 =C2=A0 '(invisible org-link)))
+ (let ((s1 (mat= ch-beginning 3))
+ =C2=A0 =C2=A0 =C2=A0(e1 (match-end 3))
+ =C2=A0 = =C2=A0 =C2=A0(s2 (match-end 4))
+ =C2=A0 =C2=A0 =C2=A0(e2 (match-beginni= ng 5)))
+ =C2=A0(add-text-properties s2 e2 '(invisible org-link))+ =C2=A0(add-text-properties s1 e1 '(invisible org-link))
+ =C2=A0(= add-text-properties s1 e2
+ =C2=A0 =C2=A0 =C2=A0 `(org-emph-start ,s1 or= g-emph-end ,e2))))
=C2=A0 =C2=A0 =C2=A0 =C2=A0(throw :exit t))))))))
= =C2=A0
+(defvar-local org-auto-emphasis--current-region-bounds nil)
+=
+(defun org-auto-emphasis--get-prop-as-list (prop)
+ =C2=A0"Hel= per function to get org-auto-emphasis properties as a list.
+If `org-aut= o-emphasis-unhide-at-point' is set to `t' then return
+the text = property PROP at point in a list. If
+`org-auto-emphasis-unhide-at-point= ' is set to `right-edge', the
+also include the text property PR= OP at point-1 unless we are at
+the beginning of the buffer."
+ = =C2=A0(remove nil
+ =C2=A0(list (get-text-property (point) prop)
+ (w= hen (and (eq org-auto-emphasis-unhide-at-point 'right-edge)
+ =C2=A0= (not (bobp)))
+ =C2=A0(get-text-property (1- (point)) prop)))))
++(defun org-auto-emphasis--post-command-hook ()
+ =C2=A0;; Rehide empha= sis markers for the previous region.
+ =C2=A0(when (and org-auto-emphasi= s--current-region-bounds
+ =C2=A0 =C2=A0 (or (< (point) (car org-auto= -emphasis--current-region-bounds))
+ (> (point) (cadr org-auto-emphas= is--current-region-bounds))
+ (and (not (eq org-auto-emphasis-unhide-at-= point 'right-edge))
+ =C2=A0 =C2=A0 =C2=A0(=3D (point) (cadr org-aut= o-emphasis--current-region-bounds)))))
+ (apply #'font-lock-flush or= g-auto-emphasis--current-region-bounds)
+ (setq org-auto-emphasis--curre= nt-region-bounds nil))
+ =C2=A0;; Unhide emphasis markers for the curren= t region.
+ =C2=A0(when-let* ((s (org-auto-emphasis--get-prop-as-list &#= 39;org-emph-start))
+ =C2=A0 =C2=A0 =C2=A0(e (org-auto-emphasis--get-pro= p-as-list 'org-emph-end))
+ =C2=A0 =C2=A0 =C2=A0(s (apply #'min = s))
+ =C2=A0 =C2=A0 =C2=A0(e (apply #'max e)))
+ =C2=A0 =C2=A0(wi= th-silent-modifications
+ =C2=A0 =C2=A0 =C2=A0(setq org-auto-emphasis--c= urrent-region-bounds (list s e))
+ =C2=A0 =C2=A0 =C2=A0(remove-text-prop= erties s (1+ s) '(invisible org-link))
+ =C2=A0 =C2=A0 =C2=A0(remove= -text-properties (1- e) e '(invisible org-link)))))
+
+(define-mi= nor-mode org-auto-emphasis-mode
+ =C2=A0"Toggle Org Auto Emphasis m= ode.
+This mode, when enabled, unhides emphasis markers for the region+at point, depending on the value of
+`org-auto-emphasis-unhide-at-poi= nt'. With a prefix argument ARG,
+enable Org Auto Emphasis mode if A= RG is positive, and disable it
+otherwise.=C2=A0 If called from Lisp, en= able the mode if ARG is
+omitted or nil.
+
+To enable this in all = org-mode files, add the following line to init.el:
+
+ =C2=A0(add-hoo= k 'org-mode #'org-auto-emphasis-mode)
+"
+ =C2=A0:init-v= alue nil
+ =C2=A0(if org-auto-emphasis-mode
+ =C2=A0 =C2=A0 =C2=A0;; = Turn on
+ =C2=A0 =C2=A0 =C2=A0(progn
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0(se= tq-local font-lock-extra-managed-props
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(append font-lock-extra-managed-props=
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0'(org-emph-start org-emph-end)))
+ =C2= =A0 =C2=A0 =C2=A0 =C2=A0(when org-auto-emphasis-unhide-at-point
+ =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0(add-hook 'post-command-hook
+ =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0#'org-aut= o-emphasis--post-command-hook nil t))
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0(font= -lock-flush))
+ =C2=A0 =C2=A0;; Turn off
+ =C2=A0 =C2=A0(remove-hook = 'post-command-hook #'org-auto-emphasis--post-command-hook t)))
+=
=C2=A0(defun org-emphasize (&optional char)
=C2=A0 =C2=A0"I= nsert or change an emphasis, i.e. a font like bold or italic.
=C2=A0If t= here is an active region, change that region to a new emphasis.
@@ -2048= 2,16 +20560,15 @@ With ARG, repeats or can move backward if negative."=
=C2=A0 =C2=A0 (beginning-of-line))
=C2=A0 =C2=A0(_ nil)))
=C2=A0 = =C2=A0 =C2=A0 =C2=A0(cl-incf arg))
- =C2=A0 =C2=A0(while (and (> arg = 0) (re-search-forward regexp nil t))
+ =C2=A0 =C2=A0(while (and (> ar= g 0) (re-search-forward regexp nil :move))
=C2=A0 =C2=A0 =C2=A0 =C2=A0(p= case (get-char-property-and-overlay (point) 'invisible)
=C2=A0 (`(ou= tline . ,o)
=C2=A0 (goto-char (overlay-end o))
- (skip-chars-forward = " \t\n")
- (end-of-line))
+ (end-of-line 2))
=C2=A0 (_=C2=A0 (end-of-line)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0(cl-decf arg))
- = =C2=A0 =C2=A0(if (> arg 0) (goto-char (point-max)) (beginning-of-line)))= )
+ =C2=A0 =C2=A0(when (/=3D arg initial-arg) (beginning-of-line))))
= =C2=A0
=C2=A0(defun org-previous-visible-heading (arg)
=C2=A0 =C2=A0&= quot;Move to the previous visible heading.
@@ -20830,11 +20907,10 @@ one= s already marked."
=C2=A0 (set-mark
=C2=A0 (save-excursion
= =C2=A0 =C2=A0 (goto-char (mark))
- =C2=A0 (goto-char (org-element-proper= ty :end (org-element-at-point)))
- =C2=A0 (point)))
+ =C2=A0 (goto-ch= ar (org-element-property :end (org-element-at-point)))))
=C2=A0 =C2=A0 = =C2=A0 =C2=A0(let ((element (org-element-at-point)))
=C2=A0 (end-of-line= )
- (push-mark (min (point-max) (org-element-property :end element)) t t= )
+ (push-mark (org-element-property :end element) t t)
=C2=A0 (goto-= char (org-element-property :begin element))))))
=C2=A0
=C2=A0(defun o= rg-narrow-to-element ()
--
2.17.1
--0000000000009adcf405a7078359-- --0000000000009adcf705a707835b Content-Type: application/octet-stream; name="0001-Add-mode-for-automatically-unhiding-emphasis-markers.patch" Content-Disposition: attachment; filename="0001-Add-mode-for-automatically-unhiding-emphasis-markers.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kawnfmhz0 RnJvbSBjMWFmOWVmYmFkNzk5M2RlYjVjNDgzOTc5Yjc2MjRlZGY4YjI2ZThkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGFua2FyIFJhbyA8c2hhbmthci5yYW9AZ21haWwuY29tPgpE YXRlOiBNb24sIDEgSnVuIDIwMjAgMTQ6NDI6NTEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBBZGQg bW9kZSBmb3IgYXV0b21hdGljYWxseSB1bmhpZGluZyBlbXBoYXNpcyBtYXJrZXJzIGluIHRoZQog Y3VycmVudCByZWdpb24KCiogbGlzcC9vcmcuZWw6CihvcmctYXV0by1lbXBoYXNpcy11bmhpZGUt YXQtcG9pbnQpOiBQYXJhbWV0ZXIgdGhhdCBjb250cm9scyB0aGUKYmVoYXZpb3Igb2YgT3JnIEF1 dG8gRW1waGFzaXMgbW9kZS4gIEl0IGNhbiBiZSBvbmUgb2YgdGhlIHZhbHVlcyBuaWwsIHQsIGFu ZAoncmlnaHQtZWRnZSwgYW5kIHdvcmtzIHNpbWlsYXJseSB0byB0aGUgcGFyYW1ldGVyCmBwcmV0 dGlmeS1zeW1ib2xzLXVucHJldHRpZnktYXQtcG9pbnQnIGZvciBgcHJldHRpZnktc3ltYm9scy1t b2RlJy4KKG9yZy1kby1lbXBoYXNpcy1mYWNlcyk6IFdoZW4gaGlkaW5nIGVtcGhhc2lzIG1hcmtl cnMsIGFkZCBhZGRpdGlvbmFsCnRleHQgcHJvcGVydGllcyAnb3JnLWVtcGgtc3RhcnQgYW5kIG9y Zy1lbXBoLWVuZCB0byB0aGUgZW1waGFzaXplZApyZWdpb24uCihvcmctYXV0by1lbXBoYXNpcy0t Y3VycmVudC1yZWdpb24tYm91bmRzKTogTG9jYWwgdmFyaWFibGUgY29udGFpbmluZwp0aGUgYm91 bmRzIG9mIHRoZSByZWdpb24gd2hvc2UgZW1waGFzaXMgbWFya2VycyBhcmUgY3VycmVudGx5CnVu aGlkZGVuLgoob3JnLWF1dG8tZW1waGFzaXMtLWdldC1wcm9wLWFzLWxpc3QpOiBIZWxwZXIgZnVu Y3Rpb24gdGhhdCByZXR1cm5zCk9yZyBBdXRvIEVtcGhhc2lzIHByb3BlcnRpZXMgYXMgYSBsaXN0 Lgoob3JnLWF1dG8tZW1waGFzaXMtLXBvc3QtY29tbWFuZC1ob29rKTogRnVuY3Rpb24gYWRkZWQg dG8KYHBvc3QtY29tbWFuZC1ob29rJyB0aGF0IHJlaGlkZXMgZW1waGFzaXMgbWFya2VycyBmb3Ig dGhlIHByZXZpb3VzCnJlZ2lvbiBhbmQgdW5oaWRlcyBlbXBoYXNpcyBtYXJrcyBmb3IgdGhlIGN1 cnJlbnQgcmVnaW9uLgoob3JnLWF1dG8tZW1waGFzaXMtbW9kZSk6IFRvZ2dsZXMgT3JnIEF1dG8g RW1waGFzaXMgbW9kZS4gIENhbiBiZQphZGRlZCB0byBgb3JnLW1vZGUtaG9vaycgdG8gYmUgZW5h YmxlZCBmb3IgYWxsIG9yZy1tb2RlIGZpbGVzLgoKVGhpcyBjb2RlIHdhcyBhZGFwdGVkIGZyb20g cHJldHRpZnktc3ltYm9scy1tb2RlIGluIHByb2ctbW9kZS5lbAotLS0KIGxpc3Avb3JnLmVsIHwg OTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0K IDEgZmlsZSBjaGFuZ2VkLCA4NyBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9saXNwL29yZy5lbCBiL2xpc3Avb3JnLmVsCmluZGV4IDdmZjdlYzY4NS4uODcwYzVj OTU4IDEwMDY0NAotLS0gYS9saXNwL29yZy5lbAorKysgYi9saXNwL29yZy5lbApAQCAtMzY0NCw2 ICszNjQ0LDE5IEBAIGZvbGxvd2luZyBzeW1ib2xzOgogICA6dHlwZSAnYm9vbGVhbgogICA6c2Fm ZSAjJ2Jvb2xlYW5wKQogCisoZGVmY3VzdG9tIG9yZy1hdXRvLWVtcGhhc2lzLXVuaGlkZS1hdC1w b2ludCBuaWwKKyAgIklmIG5vbi1uaWwsIHNob3cgdGhlIHVuaGlkZSB0aGUgZW1waGFzaXMgbWFy a2VycyBmb3IgdGhlIHJlZ2lvbiB3aGVuIHBvaW50IGlzIG9uIGl0LgorSWYgc2V0IHRvIHRoZSBz eW1ib2wgYHJpZ2h0LWVkZ2UnLCBhbHNvIHVuaGlkZSB0aGUgZW1waGFzaXMKK21hcmtlcnMgaWYg cG9pbnQgaXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGVtcGhhc2l6ZWQgcmVnaW9uLiAgVGhlCitl bXBoYXNpcyBtYXJrZXJzIHdpbGwgYmUgcmVoaWRkZW4gYXMgc29vbiBhcyBwb2ludCBtb3ZlcyBh d2F5Citmcm9tIHRoZSByZWdpb24uICBJZiBzZXQgdG8gbmlsLCB0aGUgZW1waGFzaXMgbWFya2Vy cyByZW1haW4KK2hpZGRlbiBldmVuIHdoZW4gcG9pbnQgaXMgaW4gdGhlIHJlZ2lvbi4iCisgIDp2 ZXJzaW9uICIyNS4xIgorICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiTmV2ZXIgdW5oaWRl IGVtcGhhc2lzIG1hcmtlcnMiIG5pbCkKKyAgICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIlVu aGlkZSBlbXBoYXNpcyBtYXJrZXJzIHdoZW4gcG9pbnQgaXMgaW5zaWRlIiB0KQorICAgICAgICAg ICAgICAgICAoY29uc3QgOnRhZyAiVW5oaWRlIGVtcGhhc2lzIG1hcmtlcnMgd2hlbiBwb2ludCBp cyBpbnNpZGUgb3IgYXQgcmlnaHQgZWRnZSIgcmlnaHQtZWRnZSkpCisgIDpncm91cCAnb3JnLWFw cGVhcmFuY2UpCisKIChkZWZjdXN0b20gb3JnLWhpZGUtbWFjcm8tbWFya2VycyBuaWwKICAgIk5v bi1uaWwgbWVhbiBmb250LWxvY2sgc2hvdWxkIGhpZGUgdGhlIGJyYWNrZXRzIG1hcmtpbmcgbWFj cm8gY2FsbHMuIgogICA6Z3JvdXAgJ29yZy1hcHBlYXJhbmNlCkBAIC01MDU2LDEyICs1MDY5LDc3 IEBAIHN0YWNrZWQgZGVsaW1pdGVycyBpcyBOLiAgRXNjYXBpbmcgZGVsaW1pdGVycyBpcyBub3Qg cG9zc2libGUuIgogCQkJCSAgICcoZm9udC1sb2NrLW11bHRpbGluZSB0IG9yZy1lbXBoYXNpcyB0 KSkKIAkgICAgICAod2hlbiAoYW5kIG9yZy1oaWRlLWVtcGhhc2lzLW1hcmtlcnMKIAkJCSAobm90 IChvcmctYXQtY29tbWVudC1wKSkpCi0JCShhZGQtdGV4dC1wcm9wZXJ0aWVzIChtYXRjaC1lbmQg NCkgKG1hdGNoLWJlZ2lubmluZyA1KQotCQkJCSAgICAgJyhpbnZpc2libGUgb3JnLWxpbmspKQot CQkoYWRkLXRleHQtcHJvcGVydGllcyAobWF0Y2gtYmVnaW5uaW5nIDMpIChtYXRjaC1lbmQgMykK LQkJCQkgICAgICcoaW52aXNpYmxlIG9yZy1saW5rKSkpCisJCShsZXQgKChzMSAobWF0Y2gtYmVn aW5uaW5nIDMpKQorCQkgICAgICAoZTEgKG1hdGNoLWVuZCAzKSkKKwkJICAgICAgKHMyIChtYXRj aC1lbmQgNCkpCisJCSAgICAgIChlMiAobWF0Y2gtYmVnaW5uaW5nIDUpKSkKKwkJICAoYWRkLXRl eHQtcHJvcGVydGllcyBzMiBlMiAnKGludmlzaWJsZSBvcmctbGluaykpCisJCSAgKGFkZC10ZXh0 LXByb3BlcnRpZXMgczEgZTEgJyhpbnZpc2libGUgb3JnLWxpbmspKQorCQkgIChhZGQtdGV4dC1w cm9wZXJ0aWVzIHMxIGUyCisJCQkJICAgICAgIGAob3JnLWVtcGgtc3RhcnQgLHMxIG9yZy1lbXBo LWVuZCAsZTIpKSkpCiAJICAgICAgKHRocm93IDpleGl0IHQpKSkpKSkpKQogCisoZGVmdmFyLWxv Y2FsIG9yZy1hdXRvLWVtcGhhc2lzLS1jdXJyZW50LXJlZ2lvbi1ib3VuZHMgbmlsKQorCisoZGVm dW4gb3JnLWF1dG8tZW1waGFzaXMtLWdldC1wcm9wLWFzLWxpc3QgKHByb3ApCisgICJIZWxwZXIg ZnVuY3Rpb24gdG8gZ2V0IG9yZy1hdXRvLWVtcGhhc2lzIHByb3BlcnRpZXMgYXMgYSBsaXN0Lgor SWYgYG9yZy1hdXRvLWVtcGhhc2lzLXVuaGlkZS1hdC1wb2ludCcgaXMgc2V0IHRvIGB0JyB0aGVu IHJldHVybgordGhlIHRleHQgcHJvcGVydHkgUFJPUCBhdCBwb2ludCBpbiBhIGxpc3QuIElmCitg b3JnLWF1dG8tZW1waGFzaXMtdW5oaWRlLWF0LXBvaW50JyBpcyBzZXQgdG8gYHJpZ2h0LWVkZ2Un LCB0aGUKK2Fsc28gaW5jbHVkZSB0aGUgdGV4dCBwcm9wZXJ0eSBQUk9QIGF0IHBvaW50LTEgdW5s ZXNzIHdlIGFyZSBhdAordGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLiIKKyAgKHJlbW92ZSBu aWwKKwkgIChsaXN0IChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpIHByb3ApCisJCSh3aGVuIChh bmQgKGVxIG9yZy1hdXRvLWVtcGhhc2lzLXVuaGlkZS1hdC1wb2ludCAncmlnaHQtZWRnZSkKKwkJ CSAgIChub3QgKGJvYnApKSkKKwkJICAoZ2V0LXRleHQtcHJvcGVydHkgKDEtIChwb2ludCkpIHBy b3ApKSkpKQorCisoZGVmdW4gb3JnLWF1dG8tZW1waGFzaXMtLXBvc3QtY29tbWFuZC1ob29rICgp CisgIDs7IFJlaGlkZSBlbXBoYXNpcyBtYXJrZXJzIGZvciB0aGUgcHJldmlvdXMgcmVnaW9uLgor ICAod2hlbiAoYW5kIG9yZy1hdXRvLWVtcGhhc2lzLS1jdXJyZW50LXJlZ2lvbi1ib3VuZHMKKwkg ICAgIChvciAoPCAocG9pbnQpIChjYXIgb3JnLWF1dG8tZW1waGFzaXMtLWN1cnJlbnQtcmVnaW9u LWJvdW5kcykpCisJCSAoPiAocG9pbnQpIChjYWRyIG9yZy1hdXRvLWVtcGhhc2lzLS1jdXJyZW50 LXJlZ2lvbi1ib3VuZHMpKQorCQkgKGFuZCAobm90IChlcSBvcmctYXV0by1lbXBoYXNpcy11bmhp ZGUtYXQtcG9pbnQgJ3JpZ2h0LWVkZ2UpKQorCQkgICAgICAoPSAocG9pbnQpIChjYWRyIG9yZy1h dXRvLWVtcGhhc2lzLS1jdXJyZW50LXJlZ2lvbi1ib3VuZHMpKSkpKQorCShhcHBseSAjJ2ZvbnQt bG9jay1mbHVzaCBvcmctYXV0by1lbXBoYXNpcy0tY3VycmVudC1yZWdpb24tYm91bmRzKQorCShz ZXRxIG9yZy1hdXRvLWVtcGhhc2lzLS1jdXJyZW50LXJlZ2lvbi1ib3VuZHMgbmlsKSkKKyAgOzsg VW5oaWRlIGVtcGhhc2lzIG1hcmtlcnMgZm9yIHRoZSBjdXJyZW50IHJlZ2lvbi4KKyAgKHdoZW4t bGV0KiAoKHMgKG9yZy1hdXRvLWVtcGhhc2lzLS1nZXQtcHJvcC1hcy1saXN0ICdvcmctZW1waC1z dGFydCkpCisJICAgICAgKGUgKG9yZy1hdXRvLWVtcGhhc2lzLS1nZXQtcHJvcC1hcy1saXN0ICdv cmctZW1waC1lbmQpKQorCSAgICAgIChzIChhcHBseSAjJ21pbiBzKSkKKwkgICAgICAoZSAoYXBw bHkgIydtYXggZSkpKQorICAgICh3aXRoLXNpbGVudC1tb2RpZmljYXRpb25zCisgICAgICAoc2V0 cSBvcmctYXV0by1lbXBoYXNpcy0tY3VycmVudC1yZWdpb24tYm91bmRzIChsaXN0IHMgZSkpCisg ICAgICAocmVtb3ZlLXRleHQtcHJvcGVydGllcyBzICgxKyBzKSAnKGludmlzaWJsZSBvcmctbGlu aykpCisgICAgICAocmVtb3ZlLXRleHQtcHJvcGVydGllcyAoMS0gZSkgZSAnKGludmlzaWJsZSBv cmctbGluaykpKSkpCisKKyhkZWZpbmUtbWlub3ItbW9kZSBvcmctYXV0by1lbXBoYXNpcy1tb2Rl CisgICJUb2dnbGUgT3JnIEF1dG8gRW1waGFzaXMgbW9kZS4KK1RoaXMgbW9kZSwgd2hlbiBlbmFi bGVkLCB1bmhpZGVzIGVtcGhhc2lzIG1hcmtlcnMgZm9yIHRoZSByZWdpb24KK2F0IHBvaW50LCBk ZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mCitgb3JnLWF1dG8tZW1waGFzaXMtdW5oaWRlLWF0LXBv aW50Jy4gV2l0aCBhIHByZWZpeCBhcmd1bWVudCBBUkcsCitlbmFibGUgT3JnIEF1dG8gRW1waGFz aXMgbW9kZSBpZiBBUkcgaXMgcG9zaXRpdmUsIGFuZCBkaXNhYmxlIGl0CitvdGhlcndpc2UuICBJ ZiBjYWxsZWQgZnJvbSBMaXNwLCBlbmFibGUgdGhlIG1vZGUgaWYgQVJHIGlzCitvbWl0dGVkIG9y IG5pbC4KKworVG8gZW5hYmxlIHRoaXMgaW4gYWxsIG9yZy1tb2RlIGZpbGVzLCBhZGQgdGhlIGZv bGxvd2luZyBsaW5lIHRvIGluaXQuZWw6CisKKyAgKGFkZC1ob29rICdvcmctbW9kZSAjJ29yZy1h dXRvLWVtcGhhc2lzLW1vZGUpCisiCisgIDppbml0LXZhbHVlIG5pbAorICAoaWYgb3JnLWF1dG8t ZW1waGFzaXMtbW9kZQorICAgICAgOzsgVHVybiBvbgorICAgICAgKHByb2duCisgICAgICAgIChz ZXRxLWxvY2FsIGZvbnQtbG9jay1leHRyYS1tYW5hZ2VkLXByb3BzCisgICAgICAgICAgICAgICAg ICAgIChhcHBlbmQgZm9udC1sb2NrLWV4dHJhLW1hbmFnZWQtcHJvcHMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnKG9yZy1lbXBoLXN0YXJ0IG9yZy1lbXBoLWVuZCkpKQorICAgICAgICAo d2hlbiBvcmctYXV0by1lbXBoYXNpcy11bmhpZGUtYXQtcG9pbnQKKyAgICAgICAgICAoYWRkLWhv b2sgJ3Bvc3QtY29tbWFuZC1ob29rCisgICAgICAgICAgICAgICAgICAgICMnb3JnLWF1dG8tZW1w aGFzaXMtLXBvc3QtY29tbWFuZC1ob29rIG5pbCB0KSkKKyAgICAgICAgKGZvbnQtbG9jay1mbHVz aCkpCisgICAgOzsgVHVybiBvZmYKKyAgICAocmVtb3ZlLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29r ICMnb3JnLWF1dG8tZW1waGFzaXMtLXBvc3QtY29tbWFuZC1ob29rIHQpKSkKKwogKGRlZnVuIG9y Zy1lbXBoYXNpemUgKCZvcHRpb25hbCBjaGFyKQogICAiSW5zZXJ0IG9yIGNoYW5nZSBhbiBlbXBo YXNpcywgaS5lLiBhIGZvbnQgbGlrZSBib2xkIG9yIGl0YWxpYy4KIElmIHRoZXJlIGlzIGFuIGFj dGl2ZSByZWdpb24sIGNoYW5nZSB0aGF0IHJlZ2lvbiB0byBhIG5ldyBlbXBoYXNpcy4KQEAgLTIw NDgyLDE2ICsyMDU2MCwxNSBAQCBXaXRoIEFSRywgcmVwZWF0cyBvciBjYW4gbW92ZSBiYWNrd2Fy ZCBpZiBuZWdhdGl2ZS4iCiAJICAgKGJlZ2lubmluZy1vZi1saW5lKSkKIAkgIChfIG5pbCkpKQog ICAgICAgKGNsLWluY2YgYXJnKSkKLSAgICAod2hpbGUgKGFuZCAoPiBhcmcgMCkgKHJlLXNlYXJj aC1mb3J3YXJkIHJlZ2V4cCBuaWwgdCkpCisgICAgKHdoaWxlIChhbmQgKD4gYXJnIDApIChyZS1z ZWFyY2gtZm9yd2FyZCByZWdleHAgbmlsIDptb3ZlKSkKICAgICAgIChwY2FzZSAoZ2V0LWNoYXIt cHJvcGVydHktYW5kLW92ZXJsYXkgKHBvaW50KSAnaW52aXNpYmxlKQogCShgKG91dGxpbmUgLiAs bykKIAkgKGdvdG8tY2hhciAob3ZlcmxheS1lbmQgbykpCi0JIChza2lwLWNoYXJzLWZvcndhcmQg IiBcdFxuIikKLQkgKGVuZC1vZi1saW5lKSkKKwkgKGVuZC1vZi1saW5lIDIpKQogCShfCiAJIChl bmQtb2YtbGluZSkpKQogICAgICAgKGNsLWRlY2YgYXJnKSkKLSAgICAoaWYgKD4gYXJnIDApIChn b3RvLWNoYXIgKHBvaW50LW1heCkpIChiZWdpbm5pbmctb2YtbGluZSkpKSkKKyAgICAod2hlbiAo Lz0gYXJnIGluaXRpYWwtYXJnKSAoYmVnaW5uaW5nLW9mLWxpbmUpKSkpCiAKIChkZWZ1biBvcmct cHJldmlvdXMtdmlzaWJsZS1oZWFkaW5nIChhcmcpCiAgICJNb3ZlIHRvIHRoZSBwcmV2aW91cyB2 aXNpYmxlIGhlYWRpbmcuCkBAIC0yMDgzMCwxMSArMjA5MDcsMTAgQEAgb25lcyBhbHJlYWR5IG1h cmtlZC4iCiAJKHNldC1tYXJrCiAJIChzYXZlLWV4Y3Vyc2lvbgogCSAgIChnb3RvLWNoYXIgKG1h cmspKQotCSAgIChnb3RvLWNoYXIgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgKG9yZy1lbGVt ZW50LWF0LXBvaW50KSkpCi0JICAgKHBvaW50KSkpCisJICAgKGdvdG8tY2hhciAob3JnLWVsZW1l bnQtcHJvcGVydHkgOmVuZCAob3JnLWVsZW1lbnQtYXQtcG9pbnQpKSkpKQogICAgICAgKGxldCAo KGVsZW1lbnQgKG9yZy1lbGVtZW50LWF0LXBvaW50KSkpCiAJKGVuZC1vZi1saW5lKQotCShwdXNo LW1hcmsgKG1pbiAocG9pbnQtbWF4KSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmVuZCBlbGVtZW50 KSkgdCB0KQorCShwdXNoLW1hcmsgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgZWxlbWVudCkg dCB0KQogCShnb3RvLWNoYXIgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBlbGVtZW50KSkp KSkpCiAKIChkZWZ1biBvcmctbmFycm93LXRvLWVsZW1lbnQgKCkKLS0gCjIuMTcuMQoK --0000000000009adcf705a707835b--